我有一个现有的ASP.NET Web应用程序。此ASP.NET Web应用程序使用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>
该服务与我的ASP.NET Web应用程序中的JQuery调用一起使用。我还没有开始在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旨在使这些东西更容易。但我觉得我在做一些相对基本的事情时会陷入困境。
感谢您的帮助!
答案 0 :(得分:0)
据我所知(但我对iPhone或WinPhone开发没有任何经验)你应该能够使用常规webHttpBinding
公开你的WCF服务而没有网页脚本功能来获得正常的REST样式WCF服务:
<system.serviceModel>
<services>
<service name="myService">
<endpoint
address=""
binding="webHttpBinding"
contract="ImyService" />
</service>
</services>
</system.serviceModel>
仅此一项就足够了 - 只需浏览到* .svc文件所在的虚拟目录,就可以在浏览器中看到您的顶级资源。
移动设备通常不支持SOAP样式绑定(如basicHttpBinding
等) - 因此您需要使用webHttpBinding
代替(因为这实际上只需要HTTP客户端堆栈)设备 - 现在每台设备都有这个!)