WCF 的多服务

gcx543304317 2010-01-21 03:53:42
1.多个服务(2个服务就行了)寄宿在同一个HOST 中(最好是IIS 寄宿 如果不行 Console 或是 winform 也行)
2.要是服务继承多个契约,在服务器配置文件中该如何写?
3.只能用一个端口号
4。给个最简单的能运行的 例子 谢谢~
...全文
322 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gcx543304317 2010-01-22
  • 打赏
  • 举报
回复
谢谢 大家的 指教~~
又学到 很多东西了~~
maxwellno1 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gcx543304317 的回复:]
引用 9 楼 maxwellno1 的回复:
在web.config文件里面 为每个服务expose一个endpoit
services>
      <service behaviorConfiguration="ServiceBehavior" name="WCFTest1.Class1">
        <endpoint address="" binding="basicHttpBinding" contract="WCFTest1.IClass1"/>         
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>

      <service behaviorConfiguration="Service2Behavior" name="WCFTest2.Class2">
        <endpoint address="" binding="basicHttpBinding" contract="WCFTest2.IClass2"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>


在客户端的app.config文件里面的 <client> </client>段中 分别添加对应服务的endpoint
<client>
            <endpoint address="http://localhost/WCFService/Service.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IClass1"
                contract="IClass1" name="BasicHttpBinding_IClass1" />

            <endpoint address="http://localhost/WCFService/Service2.svc"
                  binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IClass2"
                  contract="IClass2" name="BasicHttpBinding_IClass2" />
        </client>

大致配置如上

希望我没理解错楼主的意思

我主要想 实现的 是 同一个 地址 实现 2个服务
可能是我表达能力 或是 理解力不行吧 感觉 这个高手
给的 不是我想要的
[/Quote]

这个是寄存在IIS上的服务例子 地址是http://localhost/WCFService 用的是basicHttpBinding 如果你要使用别的或者自定义binding的话 添加一个<binding></binding>段 然后服务配置里的endpoint的binding改成你想要的binding
客户端的配置直接用svcuitl生成就可以了 当然你也可以自己配
qldsrx 2010-01-21
  • 打赏
  • 举报
回复
指向服务类,这个例子里不是有的吗?有2个服务你给两个SVC文件啊。
gcx543304317 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qldsrx 的回复:]
我对同一个地址的理解是,只要IP地址和端口不变,就是同一个地址,后面跟的后缀名是可以改变的,不然无法区分不同的服务,除非你写一个类,同时继承多个接口来实现服务。
[/Quote]
恩恩 高手 说得有理
由于本人初学WCF 还有很多 东西不懂
不要见笑 呵呵
我还是想问下 如果用IIS 寄宿的话
那个SVC 文件的 服务 应该指向哪呢?
因为 有2个或 2个 以上的服务了啊~~
guyehanxinlei 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qldsrx 的回复:]
这个很简单啊,只要修改下地址后面的名称即可,例如:
C# code<services><service name="Server1" behaviorConfiguration="MyBehavior"><endpoint binding="customBinding" bindingConfiguration="TcpBinding" contract="IServer1" address="net.tcp://localhost:10000/IServer1/"></endpoint></service><service name="Server2" behaviorConfiguration="MyBehavior"><endpoint binding="customBinding" bindingConfiguration="TcpBinding" contract="IServer2" address="net.tcp://localhost:10000/IServer2/"></endpoint></service></services>
[/Quote]

正解
配置不同的契约服务接口,及实现类就好了.
qldsrx 2010-01-21
  • 打赏
  • 举报
回复
我对同一个地址的理解是,只要IP地址和端口不变,就是同一个地址,后面跟的后缀名是可以改变的,不然无法区分不同的服务,除非你写一个类,同时继承多个接口来实现服务。
wangping06 2010-01-21
  • 打赏
  • 举报
回复
2、
[ServiceContract]
interface IMyContract1
{}

[ServiceContract]
interface IMyContract2
{}

class MyService:IMyContract1,IMyContract2
{}

加上五楼的就行
gcx543304317 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maxwellno1 的回复:]
在web.config文件里面 为每个服务expose一个endpoit
services>
      <service behaviorConfiguration="ServiceBehavior" name="WCFTest1.Class1">
        <endpoint address="" binding="basicHttpBinding" contract="WCFTest1.IClass1"/>         
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>

      <service behaviorConfiguration="Service2Behavior" name="WCFTest2.Class2">
        <endpoint address="" binding="basicHttpBinding" contract="WCFTest2.IClass2"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>


在客户端的app.config文件里面的 <client> </client>段中 分别添加对应服务的endpoint
<client>
            <endpoint address="http://localhost/WCFService/Service.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IClass1"
                contract="IClass1" name="BasicHttpBinding_IClass1" />

            <endpoint address="http://localhost/WCFService/Service2.svc"
                  binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IClass2"
                  contract="IClass2" name="BasicHttpBinding_IClass2" />
        </client>

大致配置如上

希望我没理解错楼主的意思
[/Quote]
我主要想 实现的 是 同一个 地址 实现 2个服务
可能是我表达能力 或是 理解力不行吧 感觉 这个高手
给的 不是我想要的
maxwellno1 2010-01-21
  • 打赏
  • 举报
回复
在web.config文件里面 为每个服务expose一个endpoit
services>
<service behaviorConfiguration="ServiceBehavior" name="WCFTest1.Class1">
<endpoint address="" binding="basicHttpBinding" contract="WCFTest1.IClass1"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

<service behaviorConfiguration="Service2Behavior" name="WCFTest2.Class2">
<endpoint address="" binding="basicHttpBinding" contract="WCFTest2.IClass2"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>


在客户端的app.config文件里面的<client></client>段中 分别添加对应服务的endpoint
<client>
<endpoint address="http://localhost/WCFService/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IClass1"
contract="IClass1" name="BasicHttpBinding_IClass1" />

<endpoint address="http://localhost/WCFService/Service2.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IClass2"
contract="IClass2" name="BasicHttpBinding_IClass2" />
</client>

大致配置如上

希望我没理解错楼主的意思
gcx543304317 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qldsrx 的回复:]
是不是给的代码太多了,你抓不到重点啊。
首先你一个服务应该会实现吧,例子不要太好找啊。
然后你复制一下那个服务的配置部分,改一下名字就是第二个服务了,地址部分看组成,前面部分是协议名+IP+端口,这部分不要动,最后部分是服务名,随便修改一个即可。这样就做到了两个服务同一个访问IP和端口号了。
[/Quote]
= = 本人也想太笨 还是 搞不出来
高手可否发下QQ ~~
QQ聊更方便~~谢谢 平时定不会打扰~
qldsrx 2010-01-21
  • 打赏
  • 举报
回复
是不是给的代码太多了,你抓不到重点啊。
首先你一个服务应该会实现吧,例子不要太好找啊。
然后你复制一下那个服务的配置部分,改一下名字就是第二个服务了,地址部分看组成,前面部分是协议名+IP+端口,这部分不要动,最后部分是服务名,随便修改一个即可。这样就做到了两个服务同一个访问IP和端口号了。
gcx543304317 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gcx543304317 的回复:]
引用 3 楼 huing 的回复:
不明白意思,2方法还是2服务?



2个契约 然后用2个服务实现
[/Quote]
如果我用HTTP 的 不是 TCP 的 怎么获得数据源?
如果我用IIS 寄宿 那个SVC文件 应该怎么写?
请高手 给个 完整的 例子 越简单越好 谢谢~~
qldsrx 2010-01-21
  • 打赏
  • 举报
回复
这个很简单啊,只要修改下地址后面的名称即可,例如:
<services>
<service name="Server1" behaviorConfiguration="MyBehavior">
<endpoint binding="customBinding" bindingConfiguration="TcpBinding" contract="IServer1" address="net.tcp://localhost:10000/IServer1/">
</endpoint>
</service>
<service name="Server2" behaviorConfiguration="MyBehavior">
<endpoint binding="customBinding" bindingConfiguration="TcpBinding" contract="IServer2" address="net.tcp://localhost:10000/IServer2/">
</endpoint>
</service>
</services>
gcx543304317 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huing 的回复:]
不明白意思,2方法还是2服务?



[/Quote]
2个契约 然后用2个服务实现
huing 2010-01-21
  • 打赏
  • 举报
回复
不明白意思,2方法还是2服务?


ivanho 2010-01-21
  • 打赏
  • 举报
回复
看来大哥跟我是遇到了同样问题了...一齐顶吧
gcx543304317 2010-01-21
  • 打赏
  • 举报
回复
自定下~~

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧