gpt4 book ai didi

c# - 在 WCF 服务中公开 webHttpBinding 终结点

转载 作者:可可西里 更新时间:2023-11-01 09:11:23 26 4
gpt4 key购买 nike

我创建了一个 WCF 服务并公开了三个端点,它们是 basicHttpBinding、wsHttpBinding 和 webHttpBinding。这是我使用 WCF 进行实验的测试服务。但是,每当我使用 .svc 文件添加服务引用时,我只会得到两个(基本和 ws)端点。由于某种原因,似乎没有公开第三个 (webHttpBidning) 端点。

要重现此问题,请创建一个 WCF 应用程序项目,删除 Service1 服务,添加名为 TestService 的新项目 > WCF 服务,并将配置文件更改为以下内容:

<system.serviceModel>
<services>
<service name="WcfTestService.TestService" behaviorConfiguration="TestServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost/WcfTestService/TestService.svc"/>
</baseAddresses>
</host>
<endpoint address="basic"
binding="basicHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="ws"
binding="wsHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="web"
binding="webHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>

这里是 ITestService.cs 的代码:

[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke]
Boolean ValidateUser(User user);
}

[DataContract]
public class User
{
[DataMember(Name = "Name")]
public String UserName { get; set; }
[DataMember]
public String Password { get; set; }
}

和 TestService.svc

public class TestService : ITestService
{
public bool ValidateUser(User user)
{
if (user.UserName == "User" && user.Password == "123")
{
return true;
}
return false;
}
}

我尝试了 WebInvoke 参数和 WebGet 参数的不同组合,但失败了。

谁能告诉我为什么第三个端点没有出现在 WSDL 文件中?

最佳答案

@decyclone:我已经成功地公开了 webHttpBindings,没有任何问题。但是当它暴露和不暴露时,我发现了一些有趣的事情!

我可以看到 Web 绑定(bind)在 Wcf 测试客户端中公开。

这是我的配置

<services>
<service behaviorConfiguration="TestWeb.Service2Behavior" name="TestWeb.Service2">
<endpoint address="" binding="wsHttpBinding" contract="TestWeb.Service2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="web" binding="webHttpBinding" contract="TestWeb.Service2">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>

这里要注意的是,它在使用 VS2008 和 Framework 3.5、VS2010 和 Framework 3.5 时工作正常,当我使用 VS2010 和 Framework 4.0 时,我看不到 WebHttpBinding 在 WCF 测试客户端中暴露,但是我可以使用那个 binidng在所有情况下都做 http post。

我假设在 Framework 4.0 中默认情况下它是不可见的,即使我尝试启用 endpointDiscovery 但仍然没有成功!

我在 post 中介绍了这种行为

关于c# - 在 WCF 服务中公开 webHttpBinding 终结点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3036012/

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