none
WCF在http绑定中如何设置IP地址,而不是默认的localhost形式???? RRS feed

  • 问题

  • 我的操作系统是xp sp2, IIS是5.1.
    我用VS2008学习WCF,按照向导创建了一个WCF服务程序,执行时候,提示服务创建成功,要测试服务,执行操作:
    svcutil.exe http://localhost:3905/service1.svc?wsdl
    通过执行该命令,得到两个文件: output.config, service1.cs

    同时,创建了一个WPF WebBrower 的客户端测试程序,将这两个文件添加到项目中,测试服务,在本机成功执行。
    在本机IE中按照以下三种格式:
    http://localhost/TestWCF_client/publish.htm
    http://sjf/TestWCF_client/publish.htm
    http://192.168.1.1/TestWCF_client/publish.htm
    均可成功执行。

    但在局域网内的其他机器就不能正确执行。
    在其他机器上http://192.168.1.1/TestWCF_client/publish.htm是可以打开我的WPF程序的,但点击测试WCF的按钮时,出现错误,即不能与WCF建立通信。

    我现在的问题是:
    如何在其他机器上能正确的与WCF建立通信????

    我试着将客户端的web.config文件中的终端节点的地址
    http://loalhost:3905/service1.svc改为http://192.168.1.1:3905/service1.svc本机执行就不成功,显示无法与WCF建立通信。
    我在服务程序中将终端节点的address(默认为"")设置为: http://192.168.1.1, 执行服务时,显示错误:没有与给定地址“http://192.168.1.1"匹配的协议绑定.....

    我不知道描述的够不够清楚,请斑竹帮我解答一下,将不胜感激。这个问题一直纠缠我是我不能继续往下学习

    另外,我的IIS5.1安装后,未做其他的任何设置。

    2010年3月4日 17:14

答案

  •     问题彻底解决啦!!
         问题出在,我的securityMode虽然设置为None,但在终结点的绑定设置中,没有引入设置了安全模式的绑定,导致安全设置没有生效。
         感谢大家对我的帮助,尤其是版主不厌其烦的解答!!!!
        
         现将我创建WCF + WPF应用程序的详细过程列举出来,希望对像我一样的初学者有所帮助。
      一、创建WCF服务端程序
          1、新建项目 
                     类型    WCF服务应用程序
                     名称    TestWCFServer
         2、 修改项目的Web.config文件
              在<System.ServiceModel>节点下,添加对绑定安全模式的设置,同时在终结点的绑定设置中引入设置了安全模式的绑定。
             
              <System.ServiceModel>
               <bindings>
                 <wsHttpBinding>
                   <binding name = "NewBinding">
                      <security mode = "None"/>
                   </binding>
                  </wsHttpBinding>
                 </bindings>
                ....
                <Services>
                  ...
                  <endpoint address = "" binding = "wsHttpBinding" bindingconfiguration = "NewBinding" Contract = "TestWCFServer.IService1">
                   ....
                </Services>
                ....
             </System.ServiceModel>
           3、发布
                点击“发布”菜单后,在弹出的对话框的“目标位置”编辑框中,定位到本地IIS,并在其下创建文件夹"TestWCFServer",结果如: http://localhost/TestWCFServer/, 然后按向导完成即可。
           4、测试
                在IE中输入: http://192.168.1.1/TestWCFServer/Service1.svc.
                页面将显示:
                已创建服务
                ...
                svcutil.exe http://sjf/TestWCFServer/Service1.svc?wsdl
                ...
                这说明服务创建成功!
            
    2010年3月11日 11:45

全部回复

  • 之前好像有人发帖 IIS5.1对于WCF的支持好像有问题。

    我测试的也是基于IIS6和7的。
    可以部署成功。其它机器也可以访问。

    比如虚拟器 安装IIS6以后,部署,可以在本机调用服务。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月5日 4:46
    版主
  • 很感谢版主的回复。
    我曾试着在XP sp2中安装IIS6,但提示IIS6安装包中缺少相关文件,不成功
    2010年3月5日 6:10
  • 很感谢版主的回复。
    我曾试着在XP sp2中安装IIS6,但提示IIS6安装包中缺少相关文件,不成功

    你可以安装个虚拟机 然后在装Server 2003或者2008.里面装IIS6,7
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月5日 6:15
    版主
  • 我将系统换到2003之后,仍然不能远程访问WCF服务,现象与xp iis5.1中表现一样,请问版主,要远程访问WCF的通用做法是怎样的??
    能否给个详细的说明??

    另外,我参考了其他关于介绍WCF的书籍,书中都说Xp sp2 IIS5.1是支持WCF的,只是只能采用http绑定而已。
    2010年3月10日 2:48
  • 你现在开发的WCF程序。在IIS里可以预览吗。就是直接在IIS 右键 svc文件,在浏览器里查看? 如果可以,证明部署成功, 使用就这个地址作为 访问的地址。 如果错误,说明服务有问题。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月10日 12:51
    版主
  • 服务,没有问题。
    我在IIS中,右键Service1.svc -> 浏览: 会在IE中打开,显示:
       服务创建成功。
      .....
      svcutil.exe http://sjf/service1.svc?wsdl

     我创建一个客户端程序,在本机是能够访问WCF的,但如何配置才能在其他机器访问呢

    另外,我在其他机器上的IE中输入:
    http://192.168.1.1/service1.svc, 也可以打开网页,显示内容与上边内容相同。
    但就是在客户端软件在其他机器上无法正确运行。
    这是不是: WCF服务需要认证的原因啊,如果是认证问题,应该如何解决??

    2010年3月11日 1:12
  • 我的客户端程序很简单,就是一个WPF Web Brower应用程序,添加引用System.ServiceModel.dll到工程中,添加WCF服务引用到工程中,在Page中添加一个按钮,在按钮的消息相应函数中添加测试代码:
    public button1_click(...)
    {
         Client.ServiceClient  client = new Client.ServiceClient();
         MessageBox.Show(client.GetData(6));
    }

    我在本机测试时,浏览WCF客户程序,一切正常。
    但在其他机器上,通过IE浏览时,WPF程序能够正常显示出来,点击按钮时出现错误,点击错误的“详细信息”显示:
    system.Runtime.Serialization.ServializationException
    程序集"System.ServiceModel, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089"中的类型"System.ServiceModel.Channels.ReceivedFault"未标记为可序列化

    这是怎么回事???

    2010年3月11日 3:15
  • 你好,
    我猜你现在使用Self Host 或VS内置开发服务器方式来部署WCF的。把WCF部署到IIS上就可以了


    Mog Liang
    2010年3月11日 5:47
  • 服务,没有问题。
    我在IIS中,右键Service1.svc -> 浏览: 会在IE中打开,显示:
       服务创建成功。
      .....
      svcutil.exe http://sjf/service1.svc?wsdl

     我创建一个客户端程序,在本机是能够访问WCF的,但如何配置才能在其他机器访问呢

    另外,我在其他机器上的IE中输入:
    http://192.168.1.1/service1.svc, 也可以打开网页,显示内容与上边内容相同。
    但就是在客户端软件在其他机器上无法正确运行。
    这是不是: WCF服务需要认证的原因啊,如果是认证问题,应该如何解决??

    把在服务端的绑定里把securityMode设置为None。



    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月11日 6:21
    版主
  • 把在服务端的绑定里把securityMode设置为None。



    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum

        (1)我单独在服务端配置文件中将 securityMode设置为None 
        (2)我将服务端和客户端配置文件中将 securityMode都设置为None 
        两种情况均没有效果,问题依旧!



    2010年3月11日 6:36
  • 你好,
    我猜你现在使用Self Host 或VS内置开发服务器方式来部署WCF的。把WCF部署到IIS上就可以了


    Mog Liang

    我应该是部署好了的,否则我在其他机器上是不能通过http://192.168.1.1/service1.svc, 打开服务页面的,不知道阁下什么意思
    2010年3月11日 6:40
  • system.Runtime.Serialization.ServializationException 程序集"System.ServiceModel, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089"中的类型"System.ServiceModel.Channels.ReceivedFault"未标记为可序列化
    这个错误究竟是什么意思???
    2010年3月11日 7:09
  • 应该是序列化除了问题。

    接收到的消息没有反序列化为对象 。

    但是为什么会出这个错误呢,

    你客户端使用的类型 是怎么定义的
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月11日 9:23
    版主
  •     问题彻底解决啦!!
         问题出在,我的securityMode虽然设置为None,但在终结点的绑定设置中,没有引入设置了安全模式的绑定,导致安全设置没有生效。
         感谢大家对我的帮助,尤其是版主不厌其烦的解答!!!!
        
         现将我创建WCF + WPF应用程序的详细过程列举出来,希望对像我一样的初学者有所帮助。
      一、创建WCF服务端程序
          1、新建项目 
                     类型    WCF服务应用程序
                     名称    TestWCFServer
         2、 修改项目的Web.config文件
              在<System.ServiceModel>节点下,添加对绑定安全模式的设置,同时在终结点的绑定设置中引入设置了安全模式的绑定。
             
              <System.ServiceModel>
               <bindings>
                 <wsHttpBinding>
                   <binding name = "NewBinding">
                      <security mode = "None"/>
                   </binding>
                  </wsHttpBinding>
                 </bindings>
                ....
                <Services>
                  ...
                  <endpoint address = "" binding = "wsHttpBinding" bindingconfiguration = "NewBinding" Contract = "TestWCFServer.IService1">
                   ....
                </Services>
                ....
             </System.ServiceModel>
           3、发布
                点击“发布”菜单后,在弹出的对话框的“目标位置”编辑框中,定位到本地IIS,并在其下创建文件夹"TestWCFServer",结果如: http://localhost/TestWCFServer/, 然后按向导完成即可。
           4、测试
                在IE中输入: http://192.168.1.1/TestWCFServer/Service1.svc.
                页面将显示:
                已创建服务
                ...
                svcutil.exe http://sjf/TestWCFServer/Service1.svc?wsdl
                ...
                这说明服务创建成功!
            
    2010年3月11日 11:45
  •   二、创建客户端程序
          1、新建项目 
                     类型    WPF浏览器应用程序
                     名称    TestWCFClient
          2、为项目添加引用: System.ServiceModel.dll
          3、为项目添加服务引用: 
                   地址: http://192.168.1.1/TestWCFServer/Service1.svc
                   命名空间:   Client
                   然后点击“确定”按钮。
          4、在Page中添加按钮,并在按钮的单击响应函数中添加测试代码:
                   private void button1_click(object sender, RoutedEventArgs e)
                    {
                         Client.Service1Client client = new Client.Service1Client();
                         MessageBox.Show(client.GetData(6));
                     }
           5、配置项目属性
                项目-> TestWCFClient属性: 
                在【签名】页面中,单击“从文件选择”按钮,导入项目生成的认证文件
                在【安全】页面中,选择“这是完全可信任的应用程序”
                保存
            6、修改项目的配置文件App.config:
                将<endpoint address = "http://localhost/TestWCFServer/Service1.svc"..>
                修改为<endpoint address = "http://192.168.1.1/TestWCFServer/Service1.svc"..>
            7、编译,发布
                 发布时,指定发布位置: http://localhost/TestWCFClient/

                 客服端测试程序编写完成。
            


         
    2010年3月11日 11:57
  •           三、测试WPF程序
              1、配置客户端程序运行环境
                   在网内随便找一台计算机,确保该机器已经安装如下环境:
                   .Net3.0(或者3.5)
                   IE6.0 以上版本
              2、导入WPF程序的安全证书
                   将WPF客服端应用程序项目自带的签名证书拷贝到本机中
                   打开IE浏览器 -> Internet选项:
                   点击【内容】页面的“证书”按钮。
                  点击【受信任的根证书颁发机构】-> “导入”: 定位到拷贝到的证书文件,按照向导完成。
                  点击【受信任的发行者】-> “导入”: 定位到拷贝到的证书文件,按照向导完成。
              3、测试程序
                  在IE浏览器中输入: http://192.168.1.1/TestWCFClient/TestWCFClient.xbap
                  浏览器页面中将会有一个“运行”按钮,点击该按钮,IE从服务器上下载xbap程序后,即可显示该程序运行的界面,在界面上点击“button1”按钮,将会弹出消息对话框,显示用户输入的数字是6.
            
              到此为止,一个完整的WCF + WPF分布式应用程序完成编写和调试运行。
    2010年3月11日 12:10
  • 都按照上面設置了,但還是不行啊,localhost成功,換成IP就報

    system.servicemodel.communicationexception crossdomainerror

    這樣的錯。

    2010年8月6日 8:27