Можно ли использовать сервис WCF из того же проекта? - PullRequest
1 голос
/ 21 сентября 2011

У меня есть приложение ASP.NET MVC 3, которое использует службу WCF в том же проекте. В идеале я хотел бы обратиться к этому сервису, используя jQuery. Тем не менее, я не могу обернуться вокруг того, что я делаю. Должен ли я создать конечную точку в конфигурации? Прямо сейчас я получаю следующее исключение:

Настройки безопасности для этой службы требуют «анонимной» аутентификации, но она не включена для приложения IIS, на котором размещена эта служба.

Я могу включить анонимную аутентификацию для IIS, но я бы предпочел использовать Windows. Когда я настраиваю конфигурацию привязки, поскольку нет конечной точки, я не уверен, куда добавить эту конфигурацию.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Вам понадобится конечная точка, но, как и для всех конечных точек WCF, ее необязательно определять в файле конфигурации - вы можете определить ее в коде.

Поскольку вы уже участвуете в веб-проекте, самым простым решением будет размещение службы WCF в IIS.Это очень легко работает с файлом конфигурации, и в .NET 4 большая часть конфигурации по умолчанию (намного проще, чем 3,5)

Как только ваша служба определена, вам нужно создать канал или клиент.Вы можете использовать инструмент svcutil для генерации прокси (с помощью мастера «Добавить новую ссылку на службу ...») или просто создать ChannelFactory

var factory = new ChannelFactory<MyService>(typeof(MyService).FullName);
MyService channel = factory.CreateChannel();

// use the channel as you would a normal instance of the class
var result = channel.MyOperation("hello world");

. Снова этот шаблон будет восстанавливать конфигурациюиз вашего web.config файла.Поскольку ваш проект - это и сервис, и клиент, вам понадобятся оба раздела.Это не полная конфигурация, но она должна дать вам идею ...

<system.serviceModel>
  <services>
    <service name="MyProject.MyService">
      <endpoint binding="basicHttpBinding" 
                contract="MyProject.IMyService" />
    </service>
  </services>
  <client>
    <endpoint name="MyProject.MyService" 
              address="http://localhost" 
              binding="basicHttpBinding" 
              contract="MyProject.IMyService" />
  </client>    
</system.serviceModel>
1 голос
/ 21 сентября 2011

Если вы хотите получить доступ к службе WCF, вам обычно нужно настроить конечную точку. Альтернативным подходом может быть размещение вашего сервиса In-Proc с использованием InProcFactory clas, который является частью библиотеки ServiceModelEx от Juval Löwy, доступной со страницы загрузки его веб-сайта (регистрация требуется загрузить его, просто найдите «ServiceModelEx» и нажмите на ссылку). Такой подход будет выглядеть так:

IMyService proxy = InProcFactory.CreateInstance<MyServiceClass, IMyService>();
proxy.MyMethod();

Это уменьшает конфигурацию, если вам не нужно выполнять какие-либо пользовательские настройки; однако, как только вы достигнете границы с конфигурацией по умолчанию, вам нужно будет либо вернуться к использованию настроенной конечной точки, либо искать способ программно обновить конфигурацию вашей службы.

...