Ошибка вызова службы WCF - PullRequest
3 голосов
/ 18 августа 2011

Мне удалось вызвать его на моем собственном сервере, и он работает, но проблема возникает, когда я размещаю службу wcf в IIS. Подробности этой ошибки следующие ...

Не удалось вызвать службу. Возможные причины: сервис не работает или недоступный; конфигурация на стороне клиента не соответствует прокси; существующий прокси-сервер недействителен. Обратитесь к трассировке стека для более детально. Вы можете попытаться восстановить, запустив новый прокси, восстановив к настройке по умолчанию или обновлению службы.

Сведения об ошибке трассировки стека

Серверу не удалось обработать запрос из-за внутренней ошибки. Для получения дополнительной информации об ошибке, либо включите IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute или из поведения конфигурации <serviceDebug>) на сервере в Чтобы отправить информацию об исключении обратно клиенту, или включите отслеживание в соответствии с документацией Microsoft .NET Framework 3.0 SDK и проверить журналы трассировки сервера.

Трассировка стека серверов:
в System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood (Сообщение ответ, ошибка MessageFault, строковое действие, версия MessageVersion, FaultConverter FaultConverter)
в System.ServiceModel.Channels.ServiceChannel.HandleReply (ProxyOperationRuntime операция, ProxyRpc & rpc)
в System.ServiceModel.Channels.ServiceChannel.Call (действие String, Boolean oneway, операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция ProxyOperationRuntime)
в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (IMessage сообщение)

Исключение переброшено в [0]:
в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg)
в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32)
at IUserService.GetUser (String UserID)
at UserServiceClient.GetUser (String UserID)

Вот исходники:

  1. файл app.config из wcfservicelirbrary

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
    <system.web>
    <compilation debug="true" />
    </system.web>
      <system.serviceModel>
        <services>
          <service name="UserServiceLibrary.UserService">
            <endpoint address="" binding="wsHttpBinding"      contract="UserServiceLibrary.IUserService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8732/Design_Time_Addresses/UserServiceLibrary/UserService/" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="True"/>
              <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>        
    </configuration>
    
  2. Файл веб-конфигурации с веб-узла WCF

    <?xml version="1.0"?>
     <configuration>
    
      <system.web>
        <compilation debug="false" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
        <services>
          <service name="UserServiceLibrary.UserService">
           <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
      contract="IMetadataExchange" />
           <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration=""
      contract="UserServiceLibrary.IUserService" />
           <endpoint address="" binding="wsHttpBinding" contract="UserServiceLibrary.IUserService" />
          </service>
        </services>
        <behaviors>
         <serviceBehaviors>
           <behavior>
    
             <serviceMetadata httpGetEnabled="true"/>
    
              <serviceDebug includeExceptionDetailInFaults="false"/>
           </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
       <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>  
    </configuration>
    

Ответы [ 3 ]

2 голосов
/ 28 мая 2014

Убедитесь, что учетная запись, на которой запущен процесс, на котором размещена служба, имеет права доступа к базе данных. Например, в случае IIS учетная запись, на которой запущен пул приложений, в котором размещена служба, должна иметь доступ к серверу базы данных и разрешения для выполнения всех необходимых операций в вашей базе данных.

1 голос
/ 18 августа 2011

Как обычно с ошибками WCF, ключ, скорее всего, находится прямо внизу трассировки стека:

UserServiceClient.GetUser(String UserID)

Именно это и вызвало ошибку в первую очередь.

Чтобы проверить, есть ли у вас доступ к серверу, попробуйте подключить отладчик Visual Studio к службе IIS (обычно w3wp.exe), на которой размещен ваш код WCF.(Сделайте это, хотя Debug | Attach to Process ...; вам нужно будет работать с правами администратора и установить флажок «Просмотр процессов от всех пользователей»).

Если вы этого не сделаетеиметь прямой доступ для подключения отладчика к службе, но может настроить файл конфигурации для службы, а затем попробовать диагностические трассировки WCF (задокументировано в MSDN здесь ).Это позволяет создавать журналы, которые можно просматривать с помощью средства просмотра трассировки служб - с помощью этого вы сможете очень легко найти гораздо больше информации об исключении.

Подсказка: в любом случае UserID null?Если да, а вы этого не ожидаете, изменился ли контракт на обслуживание в последнее время?Добавление System.Runtime.Serialization к диагностической трассировке для средства просмотра служб может привести к дополнительной информации об этом: подробности здесь .

0 голосов
/ 25 июня 2014

Лучшие практики с WCF,

  1. Убедитесь, что URL проекта WCF вместе с виртуальным каталогом отображается без ошибок и может генерировать прокси (svcutil, сопровождаемый гиперссылкой)

2 Как только WCF будет в порядке, в клиентском проекте в ServiceReferences выберите службы CONFIGURE с указанным выше URL-адресом. 3. Это должно сгенерировать прокси-сервер, если он подключен к управлению исходным кодом, таким как TFS, пожалуйста, убедитесь, что вы отметили - удалите также проверки режима, ДОЛЖНЫ только что сгенерированные файлы (показать скрытые файлы в проекте)

  1. Нажмите на Reference.cs -> выполнить кислотный тест, чтобы проверить, созданы ли новые поля ввода данных или поля данных, что подтверждает, что служба обновлена ​​* Дата обновления

Все эти неприятные ссылки WCF сложно исправить, но регенерирование иногда может помочь ...

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