У меня есть консольное приложение, в котором размещается служба WCF:
Обновлен этот код, чтобы он запускался из файла app.config вместо программной инициализации
Uri baseAddress = new Uri("http://localhost:8000/ChatServer/Service");
ServiceHost myHost = new ServiceHost(typeof(ClientServerChat.ChatServer), baseAddress);
myHost.AddServiceEndpoint(typeof(IChat), new WSHttpBinding(), "ChatService");
ServiceMetadataBehavior mb = new ServiceMetadataBehavior();
ServiceBehaviorAttribute attrib = (ServiceBehaviorAttribute)myHost.Description.Behaviors[0];
attrib.IncludeExceptionDetailInFaults = true;
mb.HttpGetEnabled = true;
myHost.Description.Behaviors.Add(mb);
myHost.Open();
Консольное приложение компилируется и запускается. svcutil работает отлично.
Svcutil отлично работает с новым сервисным кодом и генерирует код клиента и файл вывода
Я вызываю svcutil через командную строку Visual Studio следующим образом: svcutil.exe http://localhost:8000/ChatServer/Service
Генерирует этот вывод.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IChat" 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:8000/ChatServer/Service/ChatService"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IChat"
contract="IChat" name="WSHttpBinding_IChat">
<identity>
<userPrincipalName value="Bedroom-PC\Roberto" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
Наряду со связанным клиентским кодом (который находится в том же каталоге, что и выходной файл, я должен добавить), я смогу вызвать службу с помощью этого:
ChatClient client = new ChatClient();
Новый вывод svcutil (как кода, так и конфигурации) по-прежнему вызывает это исключение.
Но выдает исключение, говорящее:
"Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт" IChat "в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или из-за того, что в клиенте не найден элемент конечной точки, соответствующий этому контракту элемент ".
Интересно, что Visual Studio 2008 будет аварийно завершать работу при добавлении той же ссылки на Службу в клиентский проект.
VS2008 все еще падает с обновленным кодом.
Он найдет службу, получит все операции, а что нет. Когда я нажимаю кнопку Добавить, происходит сбой.
Кто-нибудь знает, что происходит ??
Заранее спасибо
Roberto