wcf 服务器端代码如下: C# code
 [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double Add(double n1, double n2);
        [OperationContract]
        double Subtract(double n1, double n2);    }//实现契约和接口
 public class CalculatorService : ICalculator
    {
        public double Add(double n1, double n2)
        {
            double result = n1 + n2;
            Console.WriteLine("Received Add({0},{1})", n1, n2);
            Console.WriteLine("Return: {0}", result);
            return result;
        }        public double Subtract(double n1, double n2)
        {
            double result = n1 - n2;
            Console.WriteLine("Received Subtract({0},{1})", n1, n2);
            Console.WriteLine("Return: {0}", result);
            return result;
        }    }//在main函数中执行
static void Main(string[] args)
        {
            Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");
            ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
            try
            {
                // Add a service endpoint
                serviceHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
                // Enable metadata exchange
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                serviceHost.Description.Behaviors.Add(smb);
                serviceHost.Open();
                Console.WriteLine("The service is ready.");
                Console.WriteLine("Press <ENTER> to terminate service.");
                Console.WriteLine();
                Console.ReadLine();                // Close the ServiceHostBase to shutdown the service.
                serviceHost.Close();
            }
            catch (CommunicationException ce)
            {
                Console.WriteLine("An exception occured: {0}", ce.Message);
                serviceHost.Abort();
            }
            
        }
客户端代码: C# codestatic void Main(string[] args)
        {
            //Create an instance of the WCF Client.
            System.ServiceModel.EndpointAddress epAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/Service/CalculatorService");
            CalculatorClient client = new CalculatorClient(new WSHttpBinding(), epAddress);                       // Call the Add service operation.
            double value1 = 100.00D;
            double value2 = 15.99D;
            double result = client.Add(value1, value2);
            Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);            // Call the Subtract service operation.
            value1 = 145.00D;
            value2 = 76.54D;
            result = client.Subtract(value1, value2);
            Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);                //Closing the client gracefully closes the connection and cleans up resources
            client.Close();            Console.WriteLine();
            Console.WriteLine("Press <ENTER> to terminate client.");
            Console.ReadLine();
        }如上服务器端代码所示,我想将类CalculatorService 中的Add(x,y),Subtract(x,y) 两个方法分别写在两个类中,再在CalculatorService 类中实现着2个方法。?? 谢谢

解决方案 »

  1.   

    不行,你定义的接口中ICalculator 中有两个方法,所以实现类里面必有两个.还有一个方式,就是把ICalculator分成两个接口,即两个ServiceContract.这种你只需要在一个Host下面加入两个endpoint,其中一个endpoint的contract指向另一个契约.
      

  2.   

    会ls的,ICalculator分成两个接口,host的就得open 两个啦?谢谢
      

  3.   

    据我所知,是的.只能有两个host.. 你可以找一下wcf多服务相关的.可能是我水平不够吧
      

  4.   

    我觉得可以看一下这贴,最近我在学习wcf.里面也还有许多迷惑的地方http://topic.csdn.net/u/20090306/10/d3a0b047-2634-4ffa-9cb0-e4c24b122f90.html
      

  5.   

    还有一点,我希望楼主能够在初始化servicehost的时候考虑写在using块里面,
    或者自己手动 执行dispose()。不然程序在运行的时候可能挂起