Предоставление сервиса WCF мобильным клиентам - PullRequest
1 голос
/ 26 сентября 2010

У меня есть существующее веб-приложение ASP.NET. Это веб-приложение ASP.NET использует JQuery для предоставления пользователям богатых возможностей Этот пользовательский интерфейс взаимодействует с сервером через некоторые службы WCF. Пример сервиса выглядит следующим образом:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(IncludeExceptionDetailInFaults = false)]
public class myService : ImyService
{
  public bool SomeMethod(string parameter1, string parameter2)
  {
    try
    {
      return true;
    }
    catch (Exception ex)
    {
      return false;
    }
  }
}

Теперь я хочу предоставить эту услугу iPhone и приложению Windows Phone 7. В попытке сделать это я настроил службу следующим образом:

<system.serviceModel>      
  <behaviors>
    <endpointBehaviors>
      <behavior name="myServiceBehavior">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <services>
    <service name="myService">
      <endpoint address="" behaviorConfiguration="myServiceBehavior"
        binding="webHttpBinding" contract="ImyService" />
    </service>
  </services>
</system.serviceModel>

Служба работает с вызовами JQuery в моем веб-приложении ASP.NET. Я не начал работать над клиентом iPhone. Но, когда я пытаюсь открыть этот сервис для своего клиента WP7, у меня возникают проблемы. В настоящее время, когда я запускаю свое приложение WP7, я получаю сообщение об ошибке:

KeyNotFoundException

Если я изменю привязку в файле конфигурации на «basicHttpBinding», я не смогу ссылаться на службу в Visual Studio. Я получаю сообщение об ошибке:

The endpoint at 'http://machine:80/services/myService.svc' does not have a Binding with the None MessageVersion.  'System.ServiceModel.Description.WebScriptEnablingBehavior' is only intended for use with WebHttpBinding or similar bindings.

Тьфу. Как мне двигаться вперед? Я думал, что WCF был разработан, чтобы сделать это проще. Но я чувствую, что застреваю, делая что-то относительно простое.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 сентября 2010

Насколько я знаю (но у меня нет никакого опыта в разработке для iPhone или WinPhone), вы должны иметь возможность выставить свой сервис WCF, используя обычную webHttpBinding и не имея функциональности веб-скрипта, чтобы получить нормальный WCF в стиле REST. обслуживание:

<system.serviceModel>      
   <services>
      <service name="myService">
         <endpoint 
             address="" 
             binding="webHttpBinding" 
             contract="ImyService" />
      </service>
   </services>
</system.serviceModel>

Одного этого должно быть достаточно - просто перейдите в виртуальный каталог, в котором находится ваш файл * .svc, и вы должны увидеть свои ресурсы верхнего уровня в своем браузере.

Мобильные устройства, как правило, не поддерживают привязки в стиле SOAP (например, basicHttpBinding и т. Д.), Поэтому вместо них необходимо использовать webHttpBinding (поскольку для этого на самом деле требуется только стек HTTP-клиента на устройстве - и у каждого устройства в эти дни определенно есть это!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...