Как мне указать контракт в коде C #? Я хочу удалить зависимость от конфигурационного файла и получить ошибку:
Не удалось найти конечную точку по умолчанию
элемент, который ссылается на контракт
«TFBIC.RCT.HIP.
Components.RCTBizTalk.WcfService_TFBIC_RCT_BizTalk_Orchestrations'
в клиенте Servic eModel
раздел конфигурации. Это может быть
потому что файл конфигурации не был
найден для вашего приложения, или потому что
нет элемента конечной точки, соответствующего этому
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, чтобы указать пармы, которые обычно скрыты в файле конфигурации:
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, которые вызывают .DLL, которые вызывают веб-службы WCF (.NET C #) . Я пытаюсь следовать ответу Гилхэма, хотя я не до конца его понял. Я понял, что изучение ChannelFactory - это первый шаг.
Спасибо
Нил Уолтерс
Раздел дополнительных файлов конфигурации:
<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>
Редактирование 11 ноября 2009 г. после 17:00 по центральному времени.
Сага продолжается, основываясь на том, что @Marc_s сказал ниже, я думаю, что наконец понял, что нужно заключить контракт при определении фабрики каналов. Ранее я искал что-то вроде endpoint.contract = "xxx", поскольку в файле Config контракт казался субпараметром конечной точки.
//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, которая вызывает службу WCF).
Итак, я попробовал приведенный выше код, он работает нормально, когда у меня есть файл конфигурации, но все же, когда я удаляю конфигурацию, я получаю эту ошибку:
Не удалось найти конечную точку по умолчанию
элемент, который ссылается на контракт
«TFBIC.RCT.HIP.
Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations'
в клиенте Ser ViceModel
раздел конфигурации. Это может быть
потому что файл конфигурации не был
найден для вашего приложения, или потому что
нет элемента конечной точки, соответствующего этому
договор можно найти у клиента
элемент.
Теперь я все еще в растерянности, что я делаю неправильно, чтобы удалить зависимости файла конфигурации. Сейчас я использую точный контракт, который он жалует на отсутствие в определении channelFactory. Еще раз спасибо!