是否需要在多个位置定义WCF端点?
我有一个带有app.config的VS2012解决方案。我在解决方案中有多个项目。让我们这样定义它:是否需要在多个位置定义WCF端点?,wcf,app-config,Wcf,App Config,我有一个带有app.config的VS2012解决方案。我在解决方案中有多个项目。让我们这样定义它: Root.csproj>启动项目 ->订单.csproj ->Customers.csproj ->采购.csproj 现在,当我向Orders项目添加服务引用时,它会将绑定和端点信息粘贴到Orders.csproj中的app.config中。但是,当我运行应用程序时,会出现预期的异常: 异常:找不到引用的默认终结点元素 ServiceModel客户端中的合同“OrderService.IOrd
Root.csproj>启动项目
->订单.csproj
->Customers.csproj
->采购.csproj 现在,当我向Orders项目添加服务引用时,它会将绑定和端点信息粘贴到Orders.csproj中的app.config中。但是,当我运行应用程序时,会出现预期的异常: 异常:找不到引用的默认终结点元素 ServiceModel客户端中的合同“OrderService.IOrderService” 配置部分。这可能是因为没有配置文件 为应用程序找到,或者因为没有匹配的端点元素 可以在client元素中找到此合同 这是因为根目录中的app.config不包含绑定/端点配置。我可以轻松地将绑定和端点从orders\app.config复制到root\app.config,并成功执行服务方法。我的问题是为什么我必须这样做?是否有方法告诉root\app.config从orders\app.config收集其他端点?如果服务方法需要成功执行,那么添加服务引用不会自动将绑定和端点添加到root\app.config,这似乎很愚蠢。任何建议都将不胜感激。谢谢。有服务器端的“端点” 但是在客户端……。您必须添加一些指向服务器端端点的条目 要回答您的问题,(否),您必须在客户端定义信息。 它的基本意思是“在这里可以找到您想要使用的服务” 它们看起来非常相似 服务器端:
<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>
注意,它们是相似的。注意,在客户端,端点有一个名称。
也就是说,客户端可以按名称引用端点
编辑:
您是否同时运行主机和客户端
您不能仅在调试模式下运行客户端。必须启动服务
右键单击解决方案、属性…………并设置2个启动项目。
(如果您是自托管)
如果您不是自托管……那么您如何“为服务器提供服务”?(什么在运行服务器端代码)在调试期间
编辑:
我将“分区信息”存储在不同的文件中。因此,我可以在同一app.config(或web.config)中维护它们,而不会把所有内容都弄乱
以下是一个示例:
APP.CONFIG(或web.CONFIG)
我将显示上面的一个文件
“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>
谢谢。我已经发布了我的服务,它们被托管在IIS7中。我前面的整个描述都提到了包含多个项目的客户机根解决方案。我的主要问题是,如果Root.sln\app.config要求客户端端点配置在没有端点未找到错误的情况下成功执行服务方法,为什么客户端端点配置只自动添加到Order.csproj\app.config中,.sln文件没有app.config。因此,我的做法是……。我创建了一个Console.app。我把我的CLIENT.config信息保存在那里。如果我有其他需要信息的表示层,我会使用生成后事件将文件复制到其他csproj。我将编辑我的答案以显示我是如何做到这一点的。编辑没有说明我如何将wcf设置分离到单独的文件中。它使维护更容易,伊姆霍。唯一的缺点是您必须手动将文件复制到.sln注释上的输出目录(app.config自动复制到该目录)。假设Root是一个csproj,有一个app.config,是启动项目。它的app.config中必须有端点,但orders\app.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>