我知道这已经被打死了,但我无法让它正常工作。我有一个带有多个合同的 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 服务,我是否还需要向他们提供配置文件?