gpt4 book ai didi

wcf - 调用调用另一个 WCF 服务的 WCF 服务时出现问题

转载 作者:行者123 更新时间:2023-12-02 04:13:40 29 4
gpt4 key购买 nike

我们需要从另一个 WCF 服务调用 WCF 服务。为了测试这一点,我构建了一个示例控制台应用程序来显示一个简单的字符串。设置是:
控制台应用程序 -> WCF 服务 1 -> WCF 服务 2
Console App调用服务1的方法,服务1方法最终调用服务2方法返回一个字符串。我可以调用控制台 -> 服务 1,但服务 1 -> 服务 2 不起作用。它抛出一个异常:
“在 ServiceModel 客户端配置部分中找不到引用契约(Contract) 'ITestService2' 的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为在客户端元素中找不到与此契约(Contract)匹配的端点元素。”
为此,我创建了一个 WCF 服务 2,其中一个方法返回一个字符串(没什么花哨的)。

namespace TestServices
{
[ServiceContract]
public interface ITestService2
{
[OperationContract]
string GetSomething(string s);
}
}

然后我创建使用 service2 方法 GetSomething() 的 service1 - ITestService1.cs 和 TestService1.cs。
namespace TestServices
{
[ServiceContract]
public interface ITestService1
{
[OperationContract]
string GetMessage(string s);
}
}

namespace TestServices
{
class TestService1 : ITestService1
{
public string GetMessage(string s)
{
TestService2 client = new TestService2();
return client.GetSomething("WELCOME " + s);
}
}
}

注意:我使用 svcutil.exe 为 Service2 创建了一个代理。它创建了一个 app.config 和 TestService2.cs 文件,我将它们复制到 TestService1 项目文件夹中以供引用。

最后,我创建了控制台应用程序,它只创建了一个 Service1 实例并调用 GetMessage() 方法。
static void Main(string[] args)
{
TestService1 client = new TestService1();
Console.WriteLine(client.GetMessage("Roger Harper"));
Console.ReadKey();
}

当我直接从控制台应用程序调用服务 2 时,它可以正常工作。在服务 1 中复制相同的配置和代理类。它会引发错误。配置文件如下所示:
控制台应用程序中服务 1 的配置文件:
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ITestService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:3227/WCFTestSite/TestService1.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITestService1"
contract="ITestService1" name="WSHttpBinding_ITestService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

service1 文件夹中服务 2 的配置文件:
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ITestService2" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:3227/WCFTestSite/TestService2.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISriWCFTestService2"
contract="ITestService2" name="WSHttpBinding_ITestService2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

感谢有人可以帮助我解决这个问题。我还尝试在契约(Contract)名称前加上命名空间,但没有奏效。不确定相同的配置/代理如何直接从控制台而不是在其他服务中工作。请帮忙!!!提前致谢。

最佳答案

据我所知,您有一个控制台应用程序,它自托管一个 wcf 服务,该服务正在调用第二个 wcf 服务。我猜你在 dll 中定义了一个 wcf service1,控制台应用程序加载它然后尝试调用。我认为您的问题可能是 sice 服务 1 在 dll 中,它没有加载您定义服务 2 链接的配置文件。尝试以编程方式创建端点,看看是否可以解决问题。

关于wcf - 调用调用另一个 WCF 服务的 WCF 服务时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3856128/

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