问题描述
|
我有一个wcf restful服务并正在运行。如果使用WebServiceHost启动Web服务,则可以毫无问题地发出Get / Post。我尝试将wcf服务移至本地机器上的IIS 7.5,但似乎无法正常进行。
我尝试从wcf服务调用任何内容时都收到以下错误消息:(http:// wp9dbytr1k1:8081 / service.svc / AnythingHereForGetorPUT)。我在虚拟目录/设备中尝试过,但遇到了同样的问题。
The message with Action \'\' cannot be processed at the receiver,due to a ContractFilter mismatch at the Endpointdispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements,e.g. Message,Transport,None).
如果我直接调用svc文件(http:// wp9dbytr1k1:8081 / service.svc),它会很高兴并告诉我
\“您已经创建了一项服务。
要测试此服务,您将需要创建一个客户端并使用它来调用该服务。您可以使用以下语法从命令行使用svcutil.exe工具执行此操作:
svcutil.exe http:// wp9dbytr1k1:8081 / FUU / service.svc?wsdl \“
跟踪查看器中的跟踪跟踪没有帮助:抱歉,必须添加链接,但尚不能发布图像。 (ImageLink)
这是我的web.config
<system.serviceModel>
<bindings>
<mexHttpsBinding>
<binding name=\"NewBinding0\" />
</mexHttpsBinding>
<webHttpBinding>
<binding name=\"WebBinding\">
<readerQuotas maxDepth=\"524288\" maxStringContentLength=\"524288\"
maxArrayLength=\"524288\" maxBytesPerRead=\"524288\" maxNaMetableCharCount=\"524288\" />
<security mode=\"None\">
<transport clientCredentialType=\"None\" proxyCredentialType=\"None\" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service behaviorConfiguration=\"StoredProcBehaviors\" name=\"StoredProcService.DataRetreivalService\">
<endpoint address=\"\" binding=\"webHttpBinding\" bindingConfiguration=\"WebBinding\"
contract=\"StoredProcService.IDataRetreivalService\">
<identity>
<dns value=\"locahost\" />
</identity>
</endpoint>
<endpoint address=\"mex\" binding=\"mexHttpBinding\" bindingConfiguration=\"\"
contract=\"StoredProcService.IDataRetreivalService\" />
<host>
<baseAddresses>
<add baseAddress=\"http://WP9DBYTR1K1:8081/\" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name=\"StoredProcBehaviors\">
<serviceMetadata httpGetEnabled=\"true\"/>
<serviceDebug includeExceptionDetailInFaults=\"true\" />
</behavior>
</serviceBehaviors>
</behaviors>
出于明显的原因,由于它与WebServiceHost一起使用,因此感觉像IIS设置。我已经搜索了有关如何进行设置的错误/教程,对我来说一切似乎都很好。
有什么建议么?
谢谢
解决方法
要在WCF中创建REST端点,除了使用WebHttpBinding之外,还需要具有端点行为。
<system.serviceModel>
<services>
<service behaviorConfiguration=\"StoredProcBehaviors\" name=\"StoredProcService.DataRetreivalService\">
<endpoint address=\"\" binding=\"webHttpBinding\" bindingConfiguration=\"WebBinding\" behaviorConfiguration=\"REST\"
contract=\"StoredProcService.IDataRetreivalService\">
<identity>
<dns value=\"locahost\" />
</identity>
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name=\"REST\">
<webHttp/>
</behavior>
<endpointBehaviors>
</behaviors>
</system.serviceModel>
另一种选择是在.svc文件中使用WebServiceHostFactory,其工作方式类似于WebServiceHost。在这种情况下,您甚至不需要web.config中的system.serviceModel部分。
<% @ServiceHost Service=\"StoredProcService.DataRetreivalService\" Factory=\"System.ServiceModel.Activation.WebServiceHostFactory\" Language=\"C#\" debug=\"true\" %>