如何在C#代码中指定合约?我想删除对配置文件的依赖,并获得错误:
无法找到默认端点 引用合同的元素 “TFBIC.RCT.HIP。 Components.RCTBizTalk.WcfService_TFBIC_RCT_BizTalk_Orchestrations' 在Servic eModel客户端中 配置部分。这可能是 因为没有配置文件 找到您的申请,或因为 没有匹配此co的端点元素 ntract可以在客户端找到 元件。
<endpoint
address="http://nxwtest08bt1/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ITwoWayAsync"
contract="TFBIC.RCT.HIP.Components.RCTBizTalk.WcfService_TFBIC_RCT_BizTalk_Orchestrations"
name="WSHttpBinding_ITwoWayAsync">
<identity>
<userPrincipalName value="NXWTest08BT1\BTAdmin" />
</identity>
</endpoint>
我第一次尝试使用ChannelFactory来指定通常隐藏在配置文件中的parms:
WSHttpBinding myBinding = new WSHttpBinding();
string webServiceURL = "http://localhost/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc";
EndpointAddress myEndpoint = new EndpointAddress(webServiceURL);
ChannelFactory<WcfService_TFBIC_RCT_BizTalk_Orchestrations> myChannelFactory =
new ChannelFactory<WcfService_TFBIC_RCT_BizTalk_Orchestrations>
(myBinding, myEndpoint);
// Create a channel and call the web-service via the channel
WcfService_TFBIC_RCT_BizTalk_Orchestrations wcfClient2 =
myChannelFactory.CreateChannel();
req.PolicyAction = polAction;
resp = wcfClient2.WCFSubmitPolicyAction(req);
propResult = resp.PropertyValuation;
我正在使用Intellisense和myEndPoint变量,找不到像“contract”甚至“bindingConfiguration”这样的东西。
我正在做的是将.exe复制到新目录,并完全删除<system.serviceModel>
元素/组。我想尝试完全没有配置文件运行。请参阅我的相关问题:NUnit tests that call .DLLs that call WCF Web Services (.NET C#)。我想跟随吉尔汉姆的回答,尽管我并不完全理解。我想到了解ChannelFactory如何工作是第一步。
谢谢,
Neal Walters
其他配置文件部分:
<wsHttpBinding>
<binding
name="WSHttpBinding_ITwoWayAsync" 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>
<小时/> 在中部时间下午5点之后编辑2009年11月11日
//Not-Fully Qualified Contract
//ChannelFactory<WcfService_TFBIC_RCT_BizTalk_Orchestrations> myChannelFactory =
// new ChannelFactory<WcfService_TFBIC_RCT_BizTalk_Orchestrations>(myBinding, myEndpoint);
//Fully Qualified Contract
ChannelFactory<TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations> myChannelFactory =
new ChannelFactory<TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations>(myBinding, myEndpoint);
为了进行上述编译,我还必须引用我的TBFIC.RCT.HIP.Components(我的.DLL Class-Library调用WCF服务)。
所以我尝试了上面的代码,当我有配置文件时运行正常,但是,当我删除配置时,我收到此错误:
无法找到默认端点 引用合同的元素 “TFBIC.RCT.HIP。 Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations' 在Ser viceModel客户端中 配置部分。这可能是 因为没有配置文件 找到您的申请,或因为 没有匹配此的端点元素 合同可以在客户端找到 元件。
现在,我仍然不知道我在删除配置文件的依赖项时做错了什么。我现在使用它抱怨的确切合同在channelFactory定义中丢失。再次感谢!
答案 0 :(得分:1)
嗯,在代码中创建端点时,没有与在config中创建端点时完全相同的结构。
E.g。你没有在“绑定”类上设置“bindingConfiguration” - 你需要明确设置该bindingConfiguration中的所有内容。
你能告诉我们这个部分吗? (您引用的<bindingConfiguration>
)
合同是在您创建渠道工厂时定义的 - 我认为应该没问题,就我所知。
您获得的错误似乎表明代码的某些部分仍然尝试创建客户端代理类(很可能是在命令行上使用“添加服务引用”或svcutil.exe创建的)并且代码尝试从配置文件中读取配置。
马克
PS:我认为你现在应该没事了 - 你创建wsHttpBinding
并使用所有默认值(如配置中),然后定义端点地址以指向托管服务的服务器,并在渠道工厂中指定正在使用的合同 - 这就是全部。该错误指向另一个仍在尝试从配置文件中读取的“流氓”客户端代理 - 您是否使用“添加服务引用”添加了引用?如果是这样,请从您的项目中删除该服务参考。
答案 1 :(得分:0)
我不知道这是否可行,但您是否真的计划硬编码值,如端点的URL,或安全凭证等等?这看起来对我来说真的很糟糕。
我们在这里做的是使用ChannelFactory在运行时根据我们在配置文件中保留的值生成代理。