【发布时间】:2010-04-26 00:12:11
【问题描述】:
我是 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
{
...
}
但我可以创建 1 个类来明确实现所有 3 个接口,然后我将只有 1 个 svc,然后地址变得相关......对吗?
【问题讨论】:
-
是的,如果你有三个类来实现服务契约,你需要三个SVC文件。如果您只有一个类实现所有三个接口,那么您需要一个 SVC 文件 - 每个类一个 SVC 文件来实现您的合同
-
我已经创建了一个实现所有三个接口的类,但出现以下错误:“服务‘WcfService1.Service.DirectorySearchService’的应用程序(非基础设施)端点为零。这可能是因为没有配置为您的应用程序找到了文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中没有定义端点。”有任何想法吗?我的配置如上,svc 看起来像