关于WCF关于类库和reg的问题。 DataContract

时间:2015-03-30 08:39:33

标签: wcf

网址:http://wcftutorial.net/Introduction-to-WCF.aspx

问题1:

上面的教程提到了一个提示: -

一个。在类库中定义服务并引用Host项目中的类库。不要在主机项目中使用服务类。

湾始终使用Interface->实现格式创建服务,在Interface中提及合同。

℃。在类库中定义服务并引用Host项目中的类库。不要在主机项目中使用服务类。

问题:良好做法是否建议创建另一个类库而不是现有的IService1.cs和Service1.svc?这里的任何人都可以给我一个例子,说明作者在上述观点中试图说些什么吗?

问题2: 当我创建一个新的WCF应用程序时,它有IService1.cs和Service1.svc。我在Service1.svc.cs下编写的所有实现

在IService1.cs下有服务和运营合同,数据合同(数据合同的目的是什么?我可以将其删除吗?)。

[ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }
// Use a data contract as illustrated in the sample below to add composite types to service operations.
    [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; }
        }
    }

2 个答案:

答案 0 :(得分:2)

首先,我建议您在一本书中阅读WCF的基础知识"学习WCF"来自Michele Leroux Bustamante,如果你有选择的话 - 你链接到的教程太混乱我的意见(我之前也读过它)

问题1 :问题是,您应该定义2个项目 - 1个将包含服务的主机,第二个将包含该服务的定义/实现。见下图:Svc

在ServiceHost中,我只有主要的入口点,它会启动主机。在ServiceLibrary中(您可以选择适合您的名称)我有服务接口和实现。另请注意,在ServiceHost中,我引用了ServiceLibrary。

问题2 :简单地说:在通过WCF处理自定义对象时使用DataContracts。假设您想获得有关" Person"的信息。从你服务。您可以定义例如3 OperationContracs - 首先返回名称(字符串),第二个年龄(int)和第三个电话号码(int)。  但这不是你应该继续的方式 - 你应该从服务返回Person对象(在你的情况下,你有" CompositeType")。为此,您需要使用[DataContract]属性标记该类,并将所有要与[DataMember]属性交换的信息标记。

当然你不需要定义" CompositeType"在IService中 - 您可以在项目中创建新类,命名为" CompositeType"并将其标记为[DataContract]

更明确吗?

答案 1 :(得分:1)

  

问题1的答案

是的,您需要为您的服务和单独的主机项目创建单独的类库。请参阅以下

enter image description here

你需要创建这样的东西。在AngServiceHost应用程序中添加AngService的引用。

AngServiceHost应用程序是WCF应用程序。删除Service1.cs和IService1.cs

在AngServiceHost

中的Service1.svc中添加以下行
<%@ ServiceHost Language="C#" Debug="true" Service="AngService.ILogin" %>
  

问题2的答案

无论您在.svc.cs文件中编码的是什么,都应该放在服务类库中,而不是放在宿主应用程序中。

了解.svc文件用于托管。您可以在此.svc文件中引用服务的来源。在我的例子中,AngService(类库)的dll被添加到AngServiceHost(主机应用程序)中。这个dll包含实际代码。你需要做类似的事情。