2012-03-28 61 views
3

我创建了“支持Ajax的WCF服务”。我可以从JavaScript代码中使用服务,并且WebService按预期工作。但是,我想写下ATP。所以,我将web服务作为“服务参考”添加到我的ATP项目中。然后我像往常一样调用webservice。这一切都编译好。但是,当我运行ATP,它抛出我回到这个错误将启用Ajax的WCF服务公开到C#代码

“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服务,这是完全正常工作。

请帮助。

问候 佳日

回答

1

德鲁马什的上述答案部分正确。但主要问题解决如下。 此外, 这里的问题是,当你公开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> 

在行为部分,你需要配置端点行为如下..

<endpointBehaviors> 
      <behavior name="org.proj.WebServices.WCFServiceAspNetAjaxBehavior"> 
       <enableWebScript /> 
      </behavior> 
      <behavior name="org.proj.WebServices.MyServiceSOAPBehaviour"> 
      </behavior> 
     </endpointBehaviors> 
+0

实际上,您不必使用C#中的SOAP进行通信。您可以更改客户端绑定以使用webHttpBinding,这将使它使用JSON以相同的方式进行通信。 – 2012-04-03 17:54:28

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" /> 
+0

你的答案是正确的部分。谢谢。至少它向我展示了一种调试东西的方法。 – Yash 2012-04-03 17:48:40