我有一个WCF服务:
<%@ ServiceHost Language="C#" Debug="true" Service="IWW.MIGTurbo2.WCF.Security.SecurityBroker" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
Run Code Online (Sandbox Code Playgroud)
这可以使用我的web项目中的webHttpBinding正常工作.
我也希望这个服务可以被WinForms客户端使用,所以添加了一个basicHttpBinding绑定.
我的服务器配置文件目前是:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<endpointBehaviors>
<behavior name="webScriptEnablingBehavior">
<enableWebScript />
</behavior>
<behavior name="webHttpEnablingBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="webHttpEnablingBehaviour">
<serviceMetadata httpGetEnabled="true" />
</behavior>
<behavior name="webScriptEnablingBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="IWW.MIGTurbo2.WCF.Security.SecurityBroker" behaviorConfiguration="webHttpEnablingBehaviour">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<!-- This works for web-clients -->
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
<!-- This is for WinForms clients, but isn't working -->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
</service>
</services>
<client />
<bindings>
<webHttpBinding>
<binding name="default" ></binding>
</webHttpBinding>
<basicHttpBinding>
<binding name="default" allowCookies="true"></binding>
</basicHttpBinding>
</bindings>
Run Code Online (Sandbox Code Playgroud)
标记为WinForms的部分似乎不起作用.我得到一个例外:
' http:// localhost:56125/MIGTurbo2_WEB/api/wcf/SecurityBroker.svc '中的端点没有与None MessageVersion的绑定.'System.ServiceModel.Description.WebHttpBehavior'仅适用于WebHttpBinding或类似绑定.
当我尝试使用IE手动浏览.svc文件时.显然,WinForms客户端不想知道.
任何人都可以透露为什么它不工作?它几乎看起来好像我不能有多个端点或第二个端点没有正确配置?谷歌没有提供任何特别有用的东西.
就像异常所说,你的第二个端点有(1)webHttpBehavior和(2)basicHttpBinding,这些都是不兼容的.我想你可能只想从第二个端点删除webHttpBehavior.
答案:
(布莱恩得到了积分,但这是导致它的细节)
Visual Studio在客户端为我创建了一个"customBinding"元素,这对我来说不太有帮助.为了使其正常工作,我将客户端app.config更改为:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebHttpBinding_ISecurityBroker" allowCookies="true" />
</basicHttpBinding>
</bindings>
<client>
<endpoint binding="basicHttpBinding" bindingConfiguration="WebHttpBinding_ISecurityBroker"
contract="Client.API.WCF.ISecurityBroker" name="WebHttpBinding_ISecurityBroker" />
</client>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
我的服务器端web.config是:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<endpointBehaviors>
<behavior name="webHttpEnablingBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="webHttpEnablingBehaviour">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service
name="IWW.MIGTurbo2.WCF.Security.SecurityBroker" behaviorConfiguration="webHttpEnablingBehaviour">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
<endpoint address="other"
binding="basicHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker">
</endpoint>
</service>
</services>
<client />
<bindings>
<webHttpBinding>
<binding name="default" ></binding>
</webHttpBinding>
<basicHttpBinding>
<binding name="default" allowCookies="true"></binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
我有以下代码在我的客户端应用程序(WinForms)中连接:
using (SecurityBrokerClient securityBrokerClient = new SecurityBrokerClient())
{
string securityBrokerUrl=url+"api/wcf/SecurityBroker.svc";
securityBrokerUrl += "/other";
securityBrokerClient.Endpoint.Address = new System.ServiceModel.EndpointAddress(securityBrokerUrl);
securityBrokerClient.Open();
securityBrokerClient.Login(username, password, "MIGTurbo2Admin");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25484 次 |
| 最近记录: |