我知道这个问题已经被反复讨论过了,但我无法让它像应该的那样工作。
我有一个包含多个合同的WCF服务。
当直接调用它们时,它们都可以正常工作,例如:http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278
我已经成功地在InfoPath表单和Nintex工作流程中使用了这个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服务怎么办?我必须从第三方请求配置信息吗?反之亦然,如果我创建一个旨在被第三方使用的WCF服务,我是否也需要提供配置文件?