请问服务契约ServiceContract中可不可以有属性?    [ServiceContract]
    public interface IWCFService
    {
        //操作契约
        [OperationContract]
        string SayHello(string name);
      
        [DataMember]
        int[,] Name
        {
            get;
            set;
        }
    }为什么我这么写在Add service之后看不到呢?

解决方案 »

  1.   

    你可以参考msdn文档的 ms-help://MS.MSDNQTR.v90.chs/fxref_system.servicemodel/html/6ec087ce-d2bc-722c-7632-4bdc64210a29.htm给你上面的例子 你一看就明白了
    namespace Microsoft.WCF.Documentation
    {
      [ServiceContract(
        Namespace="http://microsoft.wcf.documentation",
        Name="SampleService",
        ProtectionLevel=ProtectionLevel.EncryptAndSign
      )]
      public interface ISampleService{
        [OperationContract]
        string SampleMethod(string msg);
      }  class SampleService : ISampleService
      {
      #region ISampleService Members  public string  SampleMethod(string msg)
      {
        return "The service greets you: " + msg;
      }  #endregion
      }
    }
      

  2.   

    这是你的基础不扎实。
    你必须明白一点,自定义的属性必须在类中,一个可序列化的类或者一个标识了[DataContract]的类,而不能放在接口中。否则,那些属性将不传递,只有服务端可用。
      

  3.   


    也就是说服务契约只能是方法
    而数据契约只能是数据那么数据契约可以定义operationcontact吗?
      

  4.   

    如果你用[ServiceContract]和[DataContract]同时修饰一个类,而不是一个接口,那么这个类就同时实现了两种契约。但是这样做很不适合,当我们在外网传输数据时,要的是尽可能数据量少,传递关键数据。传递一个包含了很多方法和属性的类与传递一个仅包含属性的类相比,显然是后者好,因为方法是不能序列化传输的,用一个只含有数据的类传输会很容易理解对方传过来的是什么内容。我不知道当一个类同时实现了两种契约,客户端是否还可以正常产生代码,从未也没必要这样尝试,你还是先规范下思路,不要把服务方法和自定义类型混淆到一起去。