网址: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; }
}
}
答案 0 :(得分:2)
首先,我建议您在一本书中阅读WCF的基础知识"学习WCF"来自Michele Leroux Bustamante,如果你有选择的话 - 你链接到的教程太混乱我的意见(我之前也读过它)
问题1 :问题是,您应该定义2个项目 - 1个将包含服务的主机,第二个将包含该服务的定义/实现。见下图:
在ServiceHost中,我只有主要的入口点,它会启动主机。在ServiceLibrary中(您可以选择适合您的名称)我有服务接口和实现。另请注意,在ServiceHost中,我引用了ServiceLibrary。
问题2 :简单地说:在通过WCF处理自定义对象时使用DataContracts。假设您想获得有关" Person"的信息。从你服务。您可以定义例如3 OperationContracs - 首先返回名称(字符串),第二个年龄(int)和第三个电话号码(int)。
但这不是你应该继续的方式 - 你应该从服务返回Person对象(在你的情况下,你有" CompositeType")。为此,您需要使用[DataContract]
属性标记该类,并将所有要与[DataMember]
属性交换的信息标记。
当然你不需要定义" CompositeType"在IService中 - 您可以在项目中创建新类,命名为" CompositeType"并将其标记为[DataContract]
。
更明确吗?
答案 1 :(得分:1)
问题1的答案
是的,您需要为您的服务和单独的主机项目创建单独的类库。请参阅以下
你需要创建这样的东西。在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包含实际代码。你需要做类似的事情。