找不到引用合同的默认端点元素

我知道这已经被打死了,但我无法按照它应该的那样工作。 我有几个合同的WCF服务。 直接调用它们时它们都可以正常工作,例如http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278我已经在InfoPath Forms和Nintex Workflows上成功使用了此WCF服务。 现在我创建一个简单的ASP.Net应用程序,例如在http://www.webcodeexpert.com/2013/04/how-to-create-and-consume-wcf-services.html中完成。 我能够添加文章中描述的服务参考。 我在窗体中添加了一个按钮,并在Button1_Click事件中添加了以下代码:

protected void Button1_Click(object sender, EventArgs e)
{
    ServiceReference1.CompanyWcfServiceClient x = new ServiceReference1.CompanyWcfServiceClient();
    var result = x.Get_Document_Dates_Received("223278");
}

当我点击按钮时,出现错误:

“无法在ServiceModel客户端配置部分找到引用合同'ServiceReference1.ICompanyWcfService'的默认端点元素,这可能是因为没有为您的应用程序找到配置文件,或者是因为在客户端元素中找不到匹配此合同的端点元素“。

所以我尝试将以下内容添加到web.config中:(直接从CompanyWcfService的web.config文件中复制。

<system.serviceModel>
<services>
  <service name="CompanyWcfServices.CompanyWcfService" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="webHttpBinding" contract="CompanyWcfServices.ICompanyWcfService" behaviorConfiguration="webHttpEndpointBehavior" >
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">                                                                
    </endpoint>
  </service>
</services>
<bindings>
  <webHttpBinding>
    <binding>
      <security mode="None">
      </security>
    </binding>
  </webHttpBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name ="webHttpEndpointBehavior">
      <webHttp helpEnabled ="true" faultExceptionEnabled="true" automaticFormatSelectionEnabled="true"/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>

我得到同样的确切的错误,必须有其他事情发生。

我终于放弃了,像这样打电话给这个服务:

HttpWebRequest request = WebRequest.Create(@"http://merlin/Companyservices/CompanyWcfService.svc/Get_Document_Dates_Received/223278") as HttpWebRequest;
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = null;

var result = "";
try
{
    response = request.GetResponse() as HttpWebResponse;
    if (response.StatusCode == HttpStatusCode.OK)
    {
        using (Stream stream = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            result = reader.ReadToEnd();
        }
    }
}
catch (Exception ex)
{
    result = "";
}

我花了数小时阅读文章,其中大多数人建议将配置信息复制到web.config文件。 这对我来说似乎有问题(除了它似乎没有工作的事实)。 如果我需要使用第三方WCF服务怎么办? 我需要从第三方请求配置信息吗? 而Visa Versa,如果我创建了一个旨在供第三方使用的WCF服务,我是否也需要为它们提供配置文件?


该错误表明您没有在客户端配置部分中定义的端点。 将服务引用添加到项目时,应为您创建客户端部分。 如果没有,则在system.serviceModel部分的web.config文件中添加以下内容

<client>
  <endpoint 
      name="CompanyWcfService_webhttpBinding"
      address="http://merlin.com/CompanyServices/CompanyWcfService.svc" 
      binding="webHttpBinding" 
      contract="CompanyWcfServices.ICompanyWcfService" 
      behaviorConfiguration="webHttpEndpointBehavior"
  />
</client>

如果我们有分层架构,请确保

1) add app.config in "all projects"
2) add service config details in all app.config
3) run the project

如果您的项目正在引用一个库并尝试从该库的函数中使用WCF函数,那么您可以尝试将客户端端点从项目配置文件复制到dll的配置文件。 之前发生的一些事情发生在我身上,因为我在项目中引用的库不会使用项目配置文件(其中客户端端点被配置,因为该服务正在被引用),但它自己的结果是系统找不到端点配置。

链接地址: http://www.djcxy.com/p/87197.html

上一篇: Could not find default endpoint element that references contract

下一篇: Invalid contract attribute for IMetadataExchange