gpt4 book ai didi

c# - 为具有多个端点的 WCF 配置

转载 作者:行者123 更新时间:2023-11-30 22:46:16 24 4
gpt4 key购买 nike

我是 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 个接口(interface)的类,然后我将只有 1 个 svc,然后地址变得相关...对吗?

最佳答案

这取决于:-)

如果你想在 IIS 中托管你的 WCF 服务(查看 MSDN How To: Host a WCF Service in IIS ),正如我从你的问题中假设的那样,那么你需要三件事:

  • 一个虚拟目录(可能还有一个子目录),您将在其中放置您的服务文件 (yourservice.svc)
  • 一个服务文件 - 一个简短的一行
  • web.config 中的适当配置部分

服务文件 (*.svc) 只是一个很小的单行文本文件,用于指示 IIS 如何创建您的服务。它看起来像这样:

<%@ServiceHost language=c# Debug="true" 
Service="Microsoft.ServiceModel.Samples.CalculatorService"%>

language 属性定义了 WCF 服务的语言,debug 启用调试(对于开发和测试,对于生产禁用它),Service= 定义哪个类(完全符合 namespace 和所有)实际实现您的服务。

接下来,您需要将这些服务实现放入 *.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 用于元数据交换(您不会直接使用)。

关于c# - 为具有多个端点的 WCF 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com