none
怎么使用ASPX页面调用本地WCF服务 RRS feed

  • 问题

  •  

        我是WCF WebCast的忠实听众, 付老师讲解的WCF对我的帮助很大.最近在开发项目时遇到了一个问题:如何使用ASP.NET页面调用本地站点的的WCF服务?

        在付老师的视频教程中,总是用的应用程序作为客户端调用WCF服务,能不能介绍一下以ASP.NET页面作为客户端的例子?

    在这次开发中,我使用IIS 5.1(XP自带的)作为WCF服务的HOST.当按视频教程中的方式使用控制台应用程序调用WCF服务时(svc文件)时,完全正确.

        但是在本地站点上引用WEB服务,生成本地代理, 再调用WCF并在前台页面中显示时,系统却出奇的慢,最后显示超时,我无法弄清原因, 请答复(我是在VS2008下开发的)

        还有个问题是:WCF服务如果仅希望对本地的ASP.NET ASPX页面(或应用程序)提供服务,如何配置?

        因为最近比较急, 请帮我解决这个问题, 万分感激!!!

     

     

    //控件台代码,正常

                ServiceReference1.MyServiceClient client = new ConsoleApplication1.ServiceReference1.MyServiceClient();
                Console.Write(client.DoWork());
                Console.ReadKey();

    // 页面代码,超时      

            localhost.MyService client = new localhost.MyService();
            string strInfo = client.DoWork();

    • 已移动 桂素伟Moderator 2009年5月19日 9:49 ([Loc]From:Windows Vista 开发相关讨论)
    2008年3月16日 16:26

答案

  •  

    如何生成本地代理就不说了吧

     

    这个就是启动服务的代码,你看看

    app代码

      <system.serviceModel>
        <services>
          <service name="DService.Service1" behaviorConfiguration="serviceBehavior">
            <endpoint address="Service1" contract="DService.IService1" binding="netTcpBinding" />
            <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:9000"/>
                <add baseAddress="http://localhost:8000"/>
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="serviceBehavior" >
              <serviceDebug includeExceptionDetailInFaults="false"/>
              <serviceMetadata />
            </behavior>
          </serviceBehaviors>
        </behaviors>

      </system.serviceModel>

     

    控制代码

                ServiceHost Server = new ServiceHost(typeof(DService.Service1));
                Server.Open();
                Console.WriteLine("GO");
                Console.ReadLine();

     

    实例化一个ServiceHost,只定相应的方法,后然用Open()方法来启动服务

    2008年3月19日 8:54

全部回复

  •  

    如何生成本地代理就不说了吧

     

    这个就是启动服务的代码,你看看

    app代码

      <system.serviceModel>
        <services>
          <service name="DService.Service1" behaviorConfiguration="serviceBehavior">
            <endpoint address="Service1" contract="DService.IService1" binding="netTcpBinding" />
            <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:9000"/>
                <add baseAddress="http://localhost:8000"/>
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="serviceBehavior" >
              <serviceDebug includeExceptionDetailInFaults="false"/>
              <serviceMetadata />
            </behavior>
          </serviceBehaviors>
        </behaviors>

      </system.serviceModel>

     

    控制代码

                ServiceHost Server = new ServiceHost(typeof(DService.Service1));
                Server.Open();
                Console.WriteLine("GO");
                Console.ReadLine();

     

    实例化一个ServiceHost,只定相应的方法,后然用Open()方法来启动服务

    2008年3月19日 8:54
  • ASPX页面调用本地WCF服务,不是Console

    Console的问题已经解决.

    请你用ASPX页面调用本地WCF服务一下.

    非常感谢你的回答!

    2008年3月19日 12:54
  • asp.net和console应该没有区别

    注意的是调用本地(本机)服务,最好用

    NetNamedPipeBinding

    2008年8月19日 9:59
  •  

    http://www.cnblogs.com/yjmyzz/archive/2008/08/19/1270961.html

     

    看看这个吧,我昨天刚写的,wcf host iis的例子,不过没做任何安全处理

    2008年8月20日 12:56