我创建了一个“支持Ajax的WCF服务”。我可以从javascript代码中使用该服务,并且WebService按预期工作。但是,我想围绕它写ATP。所以,我将web服务作为“服务参考”添加到我的ATP项目中。然后我像往常一样使用web服务。这一切都很好。但是当我运行ATP时,它会让我重新回到这个错误
“System.InvalidOperationException:无法在ServiceModel客户端配置部分找到名称为”ServiceReference1.IWCFService“且收缩”ServiceReference1.IWCFService“的端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。“
这就是我在ATP的App.config文件中所拥有的。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IWCFService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFService"
contract="ServiceReference1.IWCFService" name="BasicHttpBinding_IWCFService" />
</client>
<services>
<service name="ServiceReference1.WCFService">
<endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc" behaviorConfiguration="org.proj.WebServices.WCFServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="org.proj.WebServices.IWCFService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="org.proj.WebServices.WCFServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
请让我知道可能出了什么问题? 我有一个正常的WCF服务,并且工作正常。
请帮忙。
问候 佳日
答案 0 :(得分:1)
Drew Marsh的上述答案部分正确。但主要问题解决如下。 另外, 这里的问题是,当您将WCF公开为启用了ajax的WCF服务时,它使用JSON进行通信。当您从C#代码调用相同的服务时,它使用SOAP请求调用它。因此,您需要配置服务,使其接受JSON和SOAP请求。因此,在服务部分,您需要按如下方式配置
<services>
<service name="ServiceReference1.WCFService">
<endpoint address="" behaviorConfiguration="org.proj.WebServices.WCFServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="org.proj.WebServices.IWCFService" />
<endpoint address="soapreq" behaviorConfiguration="org.proj.WebServices.MyServiceSOAPBehaviour" bindingConfiguration="BasicHttpBinding_IUpdateService"
binding="basicHttpBinding" contract="org.proj.WebServices.IWCFService" name="ServiceReference1.IWCFService" />
</service>
</services>
在behavior部分中,您需要按如下方式配置端点行为。
<endpointBehaviors>
<behavior name="org.proj.WebServices.WCFServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
<behavior name="org.proj.WebServices.MyServiceSOAPBehaviour">
</behavior>
</endpointBehaviors>
答案 1 :(得分:0)
问题是端点的名称与客户端实例要查找的内容不匹配:
<endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFService"
contract="ServiceReference1.IWCFService" name="BasicHttpBinding_IWCFService" />
根据错误消息,它希望名称也是"ServiceReference1.IWCFService"
,因此您需要此端点。
<endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFService"
contract="ServiceReference1.IWCFService" name="ServiceReference1.IWCFService" />