我有一个带有app.config的VS2012解决方案。我在解决方案中有多个项目。让我们这样定义:
Root.csproj >>启动项目
- > Orders.csproj
- > Customers.csproj
- > Purchasing.csproj
现在,当我向Orders项目添加服务引用时,它会将绑定和端点信息粘贴到Orders.csproj中的app.config中。但是,当我运行应用程序时,我得到了预期的异常:
异常:找不到引用的默认端点元素 在ServiceModel客户端中签订'OrderService.IOrderService' 配置部分。这可能是因为没有配置文件 找到您的应用程序,或者因为没有端点元素匹配 这个合同可以在客户元素中找到。
这是因为Root中的app.config不包含绑定/端点配置。我可以轻松地将orders \ app.config中的绑定和端点复制到root \ app.config并成功执行服务方法。我的问题是为什么我必须这样做?有没有办法告诉root \ app.config从orders \ app.config中收集其他端点?如果服务方法成功执行,则添加服务引用并不会自动将绑定和端点添加到root \ app.config,这似乎很愚蠢。任何建议都非常感谢。感谢。
答案 0 :(得分:1)
有服务器端“端点”.........
但是在客户端........你必须添加一些指向服务器端端点的条目。
要回答您的问题,(否),您必须在客户端定义信息。 它基本上是说“这里是找到你想要使用的服务的地方”
它们看起来非常相似。
服务器端:
<endpoint
address = "http://localhost:8001/MammalControllerFascade"
binding = "wsHttpBinding" bindingConfiguration="WSHttpBindingName1"
contract = "GranadaCoder.Applications.TrinugWCFDemoVersion1.Interfaces.Controllers.IMammalController" >
</endpoint>
<endpoint
address = "net.pipe://localhost/LocalMammalControllerFascade"
binding = "netNamedPipeBinding" bindingConfiguration="NamedPipeBindingName1"
contract = "GranadaCoder.Applications.TrinugWCFDemoVersion1.Interfaces.Controllers.IMammalController" >
</endpoint>
客户机侧
<client>
<endpoint name="WSHttpEndPoint"
address = "http://localhost:8001/MammalControllerFascade"
binding = "wsHttpBinding" bindingConfiguration="WSHttpBindingName1"
contract = "GranadaCoder.Applications.TrinugWCFDemoVersion1.Interfaces.Controllers.IMammalController" >
</endpoint >
<endpoint name="NamedPipeEndPoint"
address = "net.pipe://localhost/LocalMammalControllerFascade"
binding = "netNamedPipeBinding" bindingConfiguration="NamedPipedBindingName1"
contract = "GranadaCoder.Applications.TrinugWCFDemoVersion1.Interfaces.Controllers.IMammalController" >
</endpoint >
</client>
注意,它们是相似的。注意,在客户端,ENDPOINT有一个名称。 这样客户端就可以按名称引用ENDPOINT。
编辑:
您是否同时运行主机和客户端?
您不能只在调试模式下运行客户端。必须启动该服务。
右键单击解决方案,属性..............并设置2个启动项目。 (如果你是自托管的)
如果您不是自我托管.....那么您如何“提供服务器”? (调试期间运行服务器端代码的是什么?)
编辑:
我将“部门信息”存储在不同的文件中。所以我可以维护它们,而不会在同一个app.config(或web.config)中弄乱所有内容。
以下是一个示例:
APP.CONFIG(或web.config)
<system.serviceModel>
<behaviors configSource="WCFBehaviors.config">
</behaviors>
<bindings configSource="WCFBindings.config">
</bindings>
<client configSource="WCFClient.config">
</client>
<services configSource="WCFServices.config">
</services>
</system.serviceModel>
我将展示上面的一个文件。
下面看到的“WCFClient.config”的内容。其他文件遵循相同的模式。
<client>
<endpoint name="WSHttpEndPoint"
address = "http://localhost:8001/MammalControllerFascade"
binding = "wsHttpBinding" bindingConfiguration="WSHttpBindingName1"
contract = "GranadaCoder.Applications.TrinugWCFDemoVersion1.Interfaces.Controllers.IMammalController" >
</endpoint >
<endpoint name="NamedPipeEndPoint"
address = "net.pipe://localhost/LocalMammalControllerFascade"
binding = "netNamedPipeBinding" bindingConfiguration="NamedPipedBindingName1"
contract = "GranadaCoder.Applications.TrinugWCFDemoVersion1.Interfaces.Controllers.IMammalController" >
</endpoint >
</client>