VS2008 Сбои при добавлении службы WCF - PullRequest
0 голосов
/ 06 января 2009

У меня есть консольное приложение, в котором размещается служба 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

Ответы [ 3 ]

0 голосов
/ 07 января 2009

VS2008 просто умирает без обратной связи? Если это так, проверьте журнал событий Windows (журнал приложений) на наличие сообщений об ошибках.

Одна вероятная причина: VS2008 + System.Core.dll 3.5 + плохие образы NGen могут вызывать сбои, когда VS2008 пытается загрузить либо System.Core, либо что-либо, что ссылается на него или зависит от него.

Возможно, вы также захотите прикрепить один экземпляр VS к другому (как отладчик), чтобы увидеть дополнительные подробности сбоя. Но я бы сначала изучил трек System.Core / NGen.

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=341658 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=337149 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=330302 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=330903

0 голосов
/ 07 января 2009

Я это исправил.

Я скопировал и вставил раздел system.serviceModel из output.config в app.config после раздела userSettings и закомментировал весь output.config.

Я также указал имя конечной точки при инициализации ChatClient («имя»).

Кажется, работает.

0 голосов
/ 07 января 2009

Вы пытались использовать настройку файла конфигурации, а не делать это программно? Тогда, по крайней мере, вы будете знать, если это общая проблема с настройками или что-то связанное с вашим кодом. Затем вы можете развернуть биты кода один за другим; mex, затем конечная точка и посмотри, кто ее убивает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...