[ServiceContract]
public interface IService1
{
[OperationContract]
DataTable GetADUserList(string strUserName, string strFirstName, string strLastName, string strEmail, string domain);
}
我在IIS中拥有一项WCF服务,上面有示例服务合同。服务web.config文件设置如下。
完整的wcf web.config文件
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="notSecureBinding">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
<binding name="SecureBinding">
<binaryMessageEncoding />
<httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://ServerName.myDomain.org/ADSearcher/Service1.svc"
binding="customBinding"
bindingConfiguration="notSecureBinding"
contract="ADSearcher.IService1"
name="notSecureBinding" />
<endpoint address="http://ServerName.myDomain.org/ADSearcher/Service1.svc"
binding="customBinding"
bindingConfiguration="SecureBinding"
contract="ADSearcher.IService1"
name="SecureBinding" />
</client>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
,我正在尝试以下面的方式编程访问服务。
EndpointAddress endpointAddress = new EndpointAddress("http://ServerName.myDomain.org/ADSearcher/Service1.svc");
IService1 ADUser = new ChannelFactory<IService1>("notSecureBinding", endpointAddress).CreateChannel();
上面的代码将错误置于下方
下方在ServiceModel Client Configuration部分中找不到带有名称" NotSecureBinding"和Contract'AdSearcher.iservice1'的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者是因为在客户端元素
中找不到匹配此名称的端点元素
我似乎无法弄清楚我在这里做错了什么,或者有更好的替代方法可以编程访问此服务?
在您的端点中,您指定了Data.GetData
类型的合同。合同是IService1
类型,默认情况下,合同名称应为服务接口的打字名称。
如果您真的希望将IService
称为Data.GetData
,则可以通过ServiceContractAttribute
指定识别名称:
[ServiceContract(ConfigurationName = "Data.GetData")]
public interface IService1
{
[OperationContract]
DataTable GetADUserList(string strUserName, string strFirstName, string strLastName, string strEmail, string domain);
}
找不到名称'CustomBinding'的端点元素。 ServiceModel客户端配置部分
这是因为您在配置文件中定义了两个客户端端点。他们被命名:
- notsecurebinding和
- securebinding
因此,错误消息是正确的,没有名称" customBinding"的端点元素。
我认为您需要这样做:
IService1 ADUser = new ChannelFactory<IService1>("<either of the two bindings you defined>").CreateChannel();
我需要配置ASP.NET MVC中与WCF相关的任何内容 应用程序的web.config文件?
好吧,现在我明白了。您正在ASP.NET网站上托管WCF服务。您想从我想的其他地方打电话给它?
您绝对需要在Web.config中定义<system.serviceModel />
部分,该部分将告诉IIS如何托管您的服务。
目前,您在上面发布的配置定义为 client 端点。这些不是参考服务端点,而是客户端配置,旨在允许您调用服务。提示以节点的名称:<client />
。要定义您希望公开的服务端点,您需要将端点配置放在<service />
部分中。在您的情况下,可能只需要将"客户"更改为"服务"才能使其所有工作。
呼叫服务的代码可能需要或可能不需要app.config文件中的客户端配置。您说您正在以编程为单位(尽管没有看到完整的客户端代码,但我不知道您正在做足够的工作来满足WCF客户端呼叫堆栈),在这种情况下,您不需要客户端config。我希望这对您来说更清楚。