none
我有一个wcf的程序,怎么使用Windows Services宿主在asp.net上运行这个wcf的程序 RRS feed

  • 问题

  • 如题:
    我的Wcf程序是用的wcf类库, 在asp.net网站中添加了这个类库的引用,另外也用Windows Services作的宿主,
    问题是在这个模式下怎么调用这个wcf呢??

    说明:
    Windows Services的名称是:Service1
    wcf类库的程序是默认的那个

      // 注意: 如果更改此处的接口名称“IService1”,也必须更新 App.config 中对“IService1”的引用。
        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            string GetData(int value);
    
            [OperationContract]
            CompositeType GetDataUsingDataContract(CompositeType composite);
    
            // 任务: 在此处添加服务操作
        }
    
        // 使用下面示例中说明的数据协定将复合类型添加到服务操作
        [DataContract]
        public class CompositeType
        {
            bool boolValue = true;
            string stringValue = "Hello ";
    
            [DataMember]
            public bool BoolValue
            {
                get { return boolValue; }
                set { boolValue = value; }
            }
    
            [DataMember]
            public string StringValue
            {
                get { return stringValue; }
                set { stringValue = value; }
            }
        }


    下面是在asp.net的配置文件中我配置的节点

    <system.serviceModel>
    
    
    
              <services>
    
    
    
    	<service name="windowsServices">
    
    
    
    		<endpoint address="http://localhost:8731/Design_Time_Addresses/WcfCeshi_WindowsServices/Service1/" binding="wsHttpBinding" contract="WcfCeshi_WindowsServices.IService1"></endpoint>
    
    
    
    	</service>
    
    
    
              </services>
    
    
    
    </system.serviceModel>
    
    
    
    

      下面的是调用的代码:

     using (ChannelFactory<IService1> factory=new ChannelFactory<IService1> ())
    
            {
    
               IService1 temp= factory.CreateChannel();
    
               Response.Write(temp.GetData(1));
    
    
    
            }
    
    

    麻烦大家帮我看下,谢谢!!

     


     

    怎么老有不会的??

    2010年4月4日 3:13

答案

  • 2种方式,一个是在配置通过配置设置服务终结点信息,一个是通过代码在客户端创建代理的时候设置服务终结点信息。  IService1 temp= factory.CreateChannel();

    一定要指定服务终结点地址的,你把这个地址作为参数传递给他,<endpoint address="http://localhost:8731/Design_Time_Addresses/WcfCeshi_WindowsServices/Service1/" binding="wsHttpBinding" contract="WcfCeshi_WindowsServices.IService1"></endpoint>

    这个地址是Visual Studio 开发的时候分配的地址,部署以后你要修改的。记得和服务端保持一致。

    客户端构造函数 提供了指定 Endpoint的重载函数。你可以指定ABC。

    参考下面代码。
    EndpointAddress(http://localhost:8731/Design_Time_Addresses/WcfCeshi_WindowsServices/Service1/);


    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年4月4日 7:19
    版主

全部回复

  • 2种方式,一个是在配置通过配置设置服务终结点信息,一个是通过代码在客户端创建代理的时候设置服务终结点信息。  IService1 temp= factory.CreateChannel();

    一定要指定服务终结点地址的,你把这个地址作为参数传递给他,<endpoint address="http://localhost:8731/Design_Time_Addresses/WcfCeshi_WindowsServices/Service1/" binding="wsHttpBinding" contract="WcfCeshi_WindowsServices.IService1"></endpoint>

    这个地址是Visual Studio 开发的时候分配的地址,部署以后你要修改的。记得和服务端保持一致。

    客户端构造函数 提供了指定 Endpoint的重载函数。你可以指定ABC。

    参考下面代码。
    EndpointAddress(http://localhost:8731/Design_Time_Addresses/WcfCeshi_WindowsServices/Service1/);


    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年4月4日 7:19
    版主
  • 谢谢版主的回答!

    因为我第一次搞这个,有些地方还是不明白,还希望您再给解释一下!

    我知道这两种方式来配置abc,但是我用Windows Services作为宿主以后就不知道这个address是什么了!

    望您给举个例子,谢谢!!


    怎么老有不会的??
    2010年4月4日 7:27
  • 谢谢版主的回答!

    因为我第一次搞这个,有些地方还是不明白,还希望您再给解释一下!

    我知道这两种方式来配置abc,但是我用Windows Services作为宿主以后就不知道这个address是什么了!

    望您给举个例子,谢谢!!


    怎么老有不会的??

    不用客气,参考下面代码。Visual Studio可以提示你的,使用正确的重载方法就可以了。

    HelloWorld.HelloWorldClient hello =
    new
    HelloWorld.HelloWorldClient("BasicHttpBinding_IHelloWorld",
    new
    EndpointAddress("http://localhost:8888/BasicHost/HelloWorld"));

    string ret = hello.SayHello("WCF");


    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年4月5日 9:21
    版主