我是WCF的新手,我正试图获得一些我的想法。
基本上我有一个Web WCF应用程序项目,其web.config中包含以下内容:
<system.serviceModel>
<services>
<service name="WcfService1.ServiceContract.IDirectorySearchService" behaviorConfiguration="defaultServiceBehavior">
<endpoint name="restxml" address="xml" binding="webHttpBinding" contract="WcfService1.ServiceContract.IDirectorySearchServiceXml" behaviorConfiguration="xmlRestBehavior"/>
<endpoint name="restjson" address="json" binding="webHttpBinding" contract="WcfService1.ServiceContract.IDirectorySearchServiceJson" behaviorConfiguration="jsonRestBehavior"/>
<endpoint name="soap" address="soap" binding="basicHttpBinding" contract="WcfService1.ServiceContract.IDirectorySearchService"/>
<endpoint name="mex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="xmlRestBehavior">
<webHttp/>
</behavior>
<behavior name="jsonRestBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
我的界面如下所示:
[ServiceContract]
public interface IDirectorySearchServiceXml
{
[OperationContract]
[WebGet(UriTemplate = "Search/")]
SearchResults Search();
}
[ServiceContract]
public interface IDirectorySearchServiceJson
{
[OperationContract]
[WebGet(UriTemplate = "Search/")]
SearchResults Search();
}
[ServiceContract]
public interface IDirectorySearchService
{
[OperationContract]
SearchResults Search(int? sportId, int? instituteId, DateTime? startDate, DateTime? endDate);
}
现在我遇到一点麻烦的部分是我还需要什么才能让它运行起来......就像给出这个我需要的.svc文件一样,我有正确的配置......还有什么地址我是否需要通过浏览器或通过WCF测试客户端来运行此操作。注意我目前正在使用3.5。
干杯 安东尼
更新:
所以如果我有类似下面这样的东西,我需要3个不同的svc文件...如果是这样的话,那么在终点中有地址部分没什么意义......
public class DirectorySearchServiceXml : IDirectorySearchServiceXml
{
...
}
public class DirectorySearchServiceJson : IDirectorySearchServiceJson
{
...
}
public class DirectorySearchService : IDirectorySearchService
{
...
}
但是我可以创建一个可以实现3个接口的exsplictly的类,然后我只有1个svc然后地址变得相关......这是正确的吗?
答案 0 :(得分:2)
取决于: - )
如果您想在IIS中托管您的WCF服务(请查看MSDN How To: Host a WCF Service in IIS),我从您的问题中假设,那么您需要三件事:
服务文件(* .svc)只是一个很小的单行文本文件,用于指示IIS如何创建服务。它看起来像这样:
<%@ServiceHost language=c# Debug="true"
Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
language
属性定义WCF服务的语言,debug
启用调试(用于开发和测试,禁用它用于生产),Service=
定义哪个类(完全限定) with namespace和all)实际上实现了你的服务。
接下来,您需要将这些服务实现放入* .svc的代码隐藏文件(不推荐),或者 - 更好 - 将您的WCF服务实现编译到类库中并将该类库粘贴到您的虚拟目录下的.\bin
目录。
最后,你需要在你的服务器端web.config中进行适当的配置 - 从我所知道的,你已经有了这个,我认为应该没问题。
您的服务地址将由
决定以及配置中可能包含的各个服务端点的其他设置。
所以在你的情况下,你有
http://yourserver:port/YourVirtualDirectory/YourService.svc/restxml
http://yourserver:port/YourVirtualDirectory/YourService.svc/restjson
http://yourserver:port/YourVirtualDirectory/YourService.svc/soap
表示实际功能,* http://yourserver:port/YourVirtualDirectory/YourService.svc/mex
表示元数据交换(不会直接使用)。
答案 1 :(得分:1)
我在一个服务中的多个端点也遇到了一些问题。我总是得到错误400.我的错误是不在web.config中使用不同的地址。因此,对于每个端点使用不同的地址=配置非常重要(例如,在第1篇文章中)。一个端点可以省略它或将其留空。所有其他人都需要它。
答案 2 :(得分:0)
只是为了加入讨论。
我遇到了同样的问题,最后我开始使用部分课程。
每个端点都可以通过不同的接口实现,但是你的svc文件引用单个类名,然后将类拆分为部分类,这里是聪明的位,每个部分类可以实现不同的接口
然后,您可以将实现和接口分开,但仍然需要svc文件来引用一个类。