Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF如何绑定多个服务合同?_Wcf_C# 4.0_Wcf Binding - Fatal编程技术网

WCF如何绑定多个服务合同?

WCF如何绑定多个服务合同?,wcf,c#-4.0,wcf-binding,Wcf,C# 4.0,Wcf Binding,首先,我要道歉,因为这可能是重复的,但我读到的所有内容似乎都不完整或令人困惑,因为我对WCF非常陌生 我基本上希望在IIS中部署一个WCF服务,可以访问两个端点,并且整天都在兜圈子:( 我有一个具有以下结构的服务库WCF dll App.config TestSvc1.cs ITestSvc1.cs TestSvc2.cs ITestSvc2.cs Service1.svc Web.config 这在VS WCF测试客户端中运行良好,现在我正在部署到IIS,因此我创建了一个WCF服务应用程序

首先,我要道歉,因为这可能是重复的,但我读到的所有内容似乎都不完整或令人困惑,因为我对WCF非常陌生

我基本上希望在IIS中部署一个WCF服务,可以访问两个端点,并且整天都在兜圈子:(

我有一个具有以下结构的服务库WCF dll

App.config
TestSvc1.cs
ITestSvc1.cs
TestSvc2.cs
ITestSvc2.cs
Service1.svc
Web.config
这在VS WCF测试客户端中运行良好,现在我正在部署到IIS,因此我创建了一个WCF服务应用程序并引用了dll

App.config
TestSvc1.cs
ITestSvc1.cs
TestSvc2.cs
ITestSvc2.cs
Service1.svc
Web.config
Service1.svc
包含以下内容

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCFServices.TestServices.ITestSvc1" CodeBehind="Service1.svc.cs" %>
任何帮助都将不胜感激。正如您所看到的,我试图在
web.config
中添加一个额外的端点,但这不起作用,我收到一个错误,说TestSvc2调用在TestSvc1中找不到,我想这与
Service1.svc

我还阅读了有关创建继承这些接口的类的内容,但我不确定如何基于上面的内容实现它。我是否需要修改
Service1.svc

public interface MultipleSvc : ITestSvc1, ITestSvc2
{
   // What exactly do I put here? I have no idea, do I leave it blank? This didn't work for me
}

非常感谢各位的帮助:)

黄金法则:one
.svc
=一个服务(或者更具体地说:一个服务实现类)

因此,如果您确实有两个独立的、不同的服务(在类
WCFServices.TestServices.TestSvc1
WCFServices.TestServices.TestSvc2
中),那么您需要两个
.svc文件(每个服务一个)

您可以做的是让一个服务实现类实现两个服务契约:

public class MultipleServices : ITestSvc1, ITestSvc2
{
   // implement the service logic here, for both contracts
}
在这种情况下,一个svc文件就足够了(
.svc
文件是每个实现类的,可以承载多个服务合同)。但是,您也需要更改配置-因为您实际上只有一个服务类(因此:一个
标记)和多个托管在其中的契约:

<services>
   <service name="WCFServices.TestServices.MultipleServices">
      <endpoint 
          address="Service1" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc1">
          <identity>
            <dns value="" />
          </identity>
      </endpoint>
      <endpoint 
          address="Service2" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc2">
          <identity>
            <dns value="localhost" />
          </identity>
      </endpoint>
      <endpoint 
           address="mex" 
           binding="mexHttpBinding"  
           contract="IMetadataExchange" />
   </service>     
</services>


另外:由于您似乎是在IIS中托管WCF服务,因此没有必要定义任何
值-服务的“基本”地址是
*.svc
文件所在的位置(URI)。

您不需要两个svc文件。选择ServiceReference1.Service1Client或ServiceReference1.Service2Client。

我看到的一点是,您为服务1和服务2指定了不同的名称空间,即WCFServices.TestServices.ITestSvc1和WCFServices.TestService.ITestSvc2。注意TestServices.ITestSvc2中缺少的s。是的,很抱歉,这只是这里的一个输入错误,为了更好地说明问题,我会编辑:)为了简单起见,我会按照这里的建议使用2个svc文件。谢谢大家,尝试了singl svc并使其正常工作,然而,由于某种原因,它在部署时放弃了wshttpbinding,并通过了basichttp——奇怪的一个!我将使用两个svc文件进行测试,看看当绑定的两个seprate文件保持为wshttp时,结果是否是sameyeah。您知道当它们合并时它为什么会下降吗?+1另外:因为您似乎在IIS中托管WCF服务,所以定义任何值都没有意义-您服务的“基本”地址就是位置(URI)*.svc文件所在的地方..@marc_s我在这里问了一个相同的问题,但有点不同。你能看一下吗?