Примеры устранения неполадок WCFWCF Troubleshooting Quickstart

В этом разделе приведено несколько известных проблем, с которыми столкнулись пользователи при разработке клиентов и служб WCF.This topic lists a number of known issues customers have run into while developing WCF clients and services. Если проблема, с которой столкнулись вы, отсутствует в этом списке, рекомендуется настроить трассировку для данной службы.If the issue you are running into is not in this list, we recommend you configure tracing for your service. При этом будет создан файл трассировки, который можно просмотреть с помощью средства просмотра файлов трассировки и получить подробные сведения об исключениях, которые могут возникать в службе.This will generate a trace file that you can view with the trace file viewer and get detailed information about exceptions that may be occurring within the service. Дополнительные сведения о настройке трассировки см. в разделе: Настройка трассировки.For more information on configuring tracing, see: Configuring Tracing. Дополнительные сведения о средстве просмотра файлов трассировки см. в разделе: Службы программа Trace Viewer (SvcTraceViewer.exe).For more information on the trace file viewer, see: Service Trace Viewer Tool (SvcTraceViewer.exe).

  1. После установки Windows 7 и IIS при попытке перейти к службе WCF выдается следующее сообщение об ошибке: Ошибка HTTP 404.3-не найденоAfter installing Windows 7 and IIS, when I attempt to browse to a WCF service I get the following error message: HTTP Error 404.3 – Not Found

    Ошибка HTTP 404.3 - не найдено. Запрашиваемая страница не может быть выдана из-за конфигурации расширения.HTTP Error 404.3 – Not FoundThe page you are requesting cannot be served because of the extension configuration. Если страница - скрипт, добавьте обработчик.If the page is a script, add a handler. Если файл должен загружаться, добавьте MIME-сопоставление.If the file should be downloaded, add a MIME map. Подробное описание ошибки InformationModule StaticFileModule.Detailed Error InformationModule StaticFileModule.

  2. Иногда при втором запросе возникает исключение MessageSecurityException, если клиент бездействует некоторое время после первого запроса. В чем причина?Sometimes I receive a MessageSecurityException on the second request if my client is idle for a while after the first request. What is happening?

  3. Когда со службой взаимодействует около 10 клиентов, она отклоняет подключение новых клиентов. В чем причина?My service starts to reject new clients after about 10 clients are interacting with it. What is happening?

  4. Можно ли загружать конфигурацию службы из расположения, отличного от файла конфигурации приложения WCF?Can I load my service configuration from somewhere other than the WCF application’s configuration file?

  5. Служба и клиент работают нормально, но их не удается запустить, если клиент находится на другом компьютере. В чем причина?My service and client work great, but I can’t get them to work when the client is on another computer? What’s happening?

  6. Когда должно выдаваться исключение FaultException<исключение > где типом является исключение, всегда получает общий тип FaultException на стороне клиента, а не универсального типа. В чем причина?When I throw a FaultException<Exception> where the type is an exception, I always receive a general FaultException type on the client and not the generic type. What’s happening?

  7. Создается впечатление, что односторонние операции, а также операции запроса-ответа возвращаются примерно с той же скоростью, что и ответы без данных. В чем причина?It seems like one-way and request-reply operations return at roughly the same speed when the reply contains no data. What's happening?

  8. В службе используется сертификат X.509, при этом получается исключение System.Security.Cryptography.CryptographicException. В чем причина?I’m using an X.509 certificate with my service and I get a System.Security.Cryptography.CryptographicException. What’s happening?

  9. В имени первого параметра операции прописные буквы были заменены на строчные, и теперь клиент выдает исключение. В чем причина?I changed the first parameter of an operation from uppercase to lowercase; now my client throws an exception. What's happening?

  10. При использовании одного из средств трассировки получено исключение EndpointNotFoundException. В чем причина?I’m using one of my tracing tools and I get an EndpointNotFoundException. What’s happening?

  11. При вызове приложения WCF Web HTTP из приложения WCF SOAP служба возвращает следующую ошибку: 405 Метод запрещенWhen calling a WCF Web HTTP application from a WCF SOAP application the service returns the following error: 405 Method Not Allowed

Что такое базовый адрес? Как он связан с адресом конечной точки?What is the base address? How does it relate to an endpoint address?

После установки Windows 7 и IIS при попытке перейти к службе WCF выдается следующее сообщение об ошибке: Ошибка HTTP 404.3-не найденоAfter installing Windows 7 and IIS, when I attempt to browse to a WCF service I get the following error message: HTTP Error 404.3 – Not Found

Полное сообщение об ошибке:The full error message is:

Ошибка HTTP 404.3 - не найдено. Запрашиваемая страница не может быть выдана из-за конфигурации расширения.HTTP Error 404.3 – Not FoundThe page you are requesting cannot be served because of the extension configuration. Если страница - скрипт, добавьте обработчик.If the page is a script, add a handler. Если файл должен загружаться, добавьте MIME-сопоставление.If the file should be downloaded, add a MIME map. Подробное описание ошибки InformationModule StaticFileModule.Detailed Error InformationModule StaticFileModule.

Это сообщение об ошибке возникает при «Windows Communication Foundation активация по HTTP» не задан явно в панели управления.This error message occurs when "Windows Communication Foundation HTTP Activation" is not explicitly set in the Control Panel. Чтобы установить этот параметр, перейдите на панель управления и выберите «Программы» в левом нижнем углу окна.To set this go to the Control Panel, click Programs in the lower left hand corner of the window. Установите переключатель «Включение компонентов Windows».Click Turn Windows features on or off. Разверните элемент Microsoft .NET Framework 3.5.1 и выберите «Активация Windows Communication Foundation по HTTP».Expand Microsoft .NET Framework 3.5.1 and select Windows Communication Foundation HTTP Activation.

Иногда при втором запросе возникает исключение MessageSecurityException, если клиент бездействует некоторое время после первого запроса.Sometimes I receive a MessageSecurityException on the second request if my client is idle for a while after the first request. В чем причина?What is happening?

Второй запрос может завершиться ошибкой в первую очередь по двум причинам: (1 Истекло время ожидания сеанса или (2) веб-сервера, на котором размещается служба будет перезапущен.The second request can fail primarily for two reasons: (1) the session has timed out or (2) the Web server that is hosting the service is recycled. В первом случае сеанс действителен до того, как истечет время ожидания службы. Если служба не получает запрос от клиента в течение времени, заданного в привязке службы (ReceiveTimeout), служба завершает сеанс безопасности.In the first case, the session is valid until the service times out. When the service does not receive a request from the client within the period of time specified in the service's binding (ReceiveTimeout), the service terminates the security session. Последующие сообщения клиента приводят к исключению MessageSecurityException.Subsequent client messages result in the MessageSecurityException. Клиент должен повторно установить безопасный сеанс со службой, чтобы отправлять будущие сообщения, или использовать маркер контекста безопасности с отслеживанием состояния.The client must re-establish a secure session with the service to send future messages or use a stateful security context token. Токены контекста безопасности с отслеживанием состояния также позволяют защитить сеанс во время перезапуска веб-сервера.Stateful security context tokens also allow a secure session to survive a Web server being recycled. Дополнительные сведения об использовании токенов контекста с отслеживанием состояния безопасности в безопасном сеансе см. в разделе как: Создайте контекст безопасности маркера для безопасного сеанса.For more information about using stateful secure context tokens in a secure session, see How to: Create a Security Context Token for a Secure Session. Кроме того, можно отключить безопасные сеансы.Alternatively, you can disable secure sessions. При использовании <wsHttpBinding > привязки, можно задать establishSecurityContext свойства false отключения безопасных сеансов.When you use the <wsHttpBinding> binding, you can set the establishSecurityContext property to false to disable secure sessions. Чтобы отключить безопасные сеансы для других привязок, необходимо создать пользовательскую привязку.To disable secure sessions for other bindings, you must create a custom binding. Дополнительные сведения о создании пользовательской привязки, см. в разделе как: Создание пользовательской привязки с использованием элемента SecurityBindingElement.For details about creating a custom binding, see How to: Create a Custom Binding Using the SecurityBindingElement. Перед применением этих параметров необходимо разобраться с требованиями безопасности приложения.Before you apply any of these options, you must understand your application's security requirements.

Когда со службой взаимодействует около 10 клиентов, она отклоняет подключение новых клиентов.My service starts to reject new clients after about 10 clients are interacting with it. В чем причина?What is happening?

По умолчанию службы поддерживают не более 10 параллельных сеансов.By default, services can have only 10 concurrent sessions. Поэтому при использовании в привязках службы сеансов, служба принимает подключения новых клиентов до достижения этого числа. После этого служба отклоняет подключения новых клиентов, пока не будет закрыт один из текущих сеансов.Therefore, if the service bindings use sessions, the service accepts new client connections until it reaches that number, after which it refuses new client connections until one of the current sessions ends. Поддержку большего количества клиентов можно обеспечить несколькими способами.You can support more clients in a number of ways. Если для службы не требуются сеансы, не используйте сеансовую привязку.If your service does not require sessions, do not use a sessionful binding. (Дополнительные сведения см. в разделе с использованием сеансов.) Можно также увеличить ограничение сеансов, установив подходящее значение для свойства MaxConcurrentSessions.(For more information, see Using Sessions.) Another option is to increase the session limit by changing the value of the MaxConcurrentSessions property to the number appropriate to your circumstance.

Можно ли загружать конфигурацию службы из расположения, отличного от файла конфигурации приложения WCF?Can I load my service configuration from somewhere other than the WCF application’s configuration file?

Да, но необходимо создать пользовательский класс ServiceHost , переопределяющий метод ApplyConfiguration .Yes, however, you have to create a custom ServiceHost class that overrides the ApplyConfiguration method. Внутри этого метода можно вызвать базовый класс, чтобы сначала загрузить конфигурацию (если дополнительно требуется загрузить сведения о стандартной конфигурации), но можно также полностью заменить систему загрузки конфигурации.Inside that method, you can call the base to load configuration first (if you want to load the standard configuration information as well) but you can also entirely replace the configuration loading system. Обратите внимание, что если требуется загрузить конфигурацию из файла, отличного от файла конфигурации приложения, необходимо самостоятельно выполнять анализ файла и загрузить конфигурацию.Note that if you want to load configuration from a configuration file that is different from the application configuration file, you must parse the configuration file yourself and load the configuration.

В следующем примере кода показано, как переопределить метод ApplyConfiguration и напрямую настроить конечную точку.The following code example shows how to override the ApplyConfiguration method and directly configure an endpoint.

public class MyServiceHost : ServiceHost  
{  
    public MyServiceHost(Type serviceType, params Uri[] baseAddresses)    
      : base(serviceType, baseAddresses)  
    {
        Console.WriteLine("MyServiceHost Constructor");
    }  
  
    protected override void ApplyConfiguration()  
    {  
        string straddress = GetAddress();  
        Uri address = new Uri(straddress);  
        Binding binding = GetBinding();  
        base.AddServiceEndpoint(typeof(IData), binding, address);  
    }  
  
    string GetAddress()  
    {
        return "http://MyMachine:7777/MyEndpointAddress/";
    }  
  
    Binding GetBinding()  
    {  
        WSHttpBinding binding = new WSHttpBinding();  
        binding.Security.Mode = SecurityMode.None;  
        return binding;  
    }  
}  

Служба и клиент работают нормально, но их не удается запустить, если клиент находится на другом компьютере.My service and client work great, but I can’t get them to work when the client is on another computer? В чем причина?What’s happening?

В зависимости от исключения возможны следующие причины.Depending upon the exception, there may be several issues:

  • Возможно, потребуется использовать для адреса конечной точки клиента имя узла, а не "localhost".You might need to change the client endpoint addresses to the host name and not "localhost".

  • Возможно, для приложения потребуется открыть порт.You might need to open the port to the application. Дополнительные сведения см. в разделе Firewall Instructions примеров SDK.For details, see Firewall Instructions from the SDK samples.

  • Другие возможные причины этой проблемы см. в разделе примеров выполнение образцов Windows Communication Foundation.For other possible issues, see the samples topic Running the Windows Communication Foundation Samples.

  • Если в клиенте используются учетные данные Windows и создается исключение SecurityNegotiationException, настройте Kerberos, как указано ниже.If your client is using Windows credentials and the exception is a SecurityNegotiationException, configure Kerberos as follows.

    1. Добавьте учетные данные идентификации в элемент конечной точки в файле конфигурации клиента App.config.Add the identity credentials to the endpoint element in the client’s App.config file:

      <endpoint   
        address="http://MyServer:8000/MyService/"   
        binding="wsHttpBinding"   
        bindingConfiguration="WSHttpBinding_IServiceExample"   
        contract="IServiceExample"   
        behaviorConfiguration="ClientCredBehavior"   
        name="WSHttpBinding_IServiceExample">  
        <identity>  
          <userPrincipalName value="name@corp.contoso.com"/>  
        </identity>  
      </endpoint>  
      
    2. Для этого запустите службу от имени учетной записи System или NetworkService.Run the self-hosted service under the System or NetworkService account. Чтобы создать командное окно в учетной записи System, выполните следующую команду.You can run this command to create a command window under the System account:

      at 12:36 /interactive "cmd.exe"  
      
    3. Разместите службу в службах IIS, которые по умолчанию используют учетную запись имени участника службы (SPN).Host the service under Internet Information Services (IIS), which, by default, uses the service principal name (SPN) account.

    4. Зарегистрируйте в домене новое имя участника службы (SPN) с помощью программы SetSPN.Register a new SPN with the domain using SetSPN. Обратите внимание, что для этого потребуются права администратора домена.Note that you will need to be a domain administrator in order to do this.

Дополнительные сведения о протоколе Kerberos см. в разделе Security Concepts Used in WCF и:For more information about the Kerberos protocol, see Security Concepts Used in WCF and:

Когда должно выдаваться исключение FaultException<исключение > где типом является исключение, всегда получает общий тип FaultException на стороне клиента, а не универсального типа.When I throw a FaultException<Exception> where the type is an exception, I always receive a general FaultException type on the client and not the generic type. В чем причина?What’s happening?

Настоятельно рекомендуется создать свой собственный пользовательский тип данных об ошибке и объявить его в качестве типа сведений в контракте сбоя.It is highly recommended that you create your own custom error data type and declare that as the detail type in your fault contract. Это необходимо, так как при использовании типов исключений, предоставляемых системой, могут возникнуть следующие проблемы.The reason is that using system-provided exception types:

  • Создается зависимость типов, которая не дает возможности воспользоваться одним из главных преимуществ приложений, ориентированных на службы.Creates a type dependency that removes one of the biggest strengths of service-oriented applications.

  • Не удается воспользоваться стандартной сериализацией исключений.Cannot depend upon exceptions serializing in a standard way. Некоторые из них, например SecurityException, могут вообще не сериализоваться.Some—like SecurityException—may not be serializable at all.

  • Внутренние сведения сериализации доступны для клиентов.Exposes internal implementation details to clients. Дополнительные сведения см. в разделе задание и обработка сбоев в контрактах и службах.For more information, see Specifying and Handling Faults in Contracts and Services.

Однако при отладке приложения можно сериализовать сведения об исключении и возвратить их клиенту с помощью класса ServiceDebugBehavior .If you are debugging an application, however, you can serialize exception information and return it to the client by using the ServiceDebugBehavior class.

Создается впечатление, что односторонние операции, а также операции запроса-ответа возвращаются примерно с той же скоростью, что и ответы без данных.It seems like one-way and request-reply operations return at roughly the same speed when the reply contains no data. В чем причина?What's happening?

Если указывается, что операция является односторонней, это лишь означает, что контракт операции принимает входящее сообщение и не возвращает выходное сообщение.Specifying that an operation is one way means only that the operation contract accepts an input message and does not return an output message. В WCF все вызовы клиентов возвращаются, когда исходящие данные были переданы по каналам связи или создается исключение.In WCF, all client invocations return when the outbound data has been written to the wire or an exception is thrown. Односторонние операции выполняются таким же образом, и они могут создавать исключение, если не удается обнаружить службу, или заблокировать выполнение, если служба не готова к приему данных из сети.One-way operations work the same way, and they can throw if the service cannot be located or block if the service is not prepared to accept the data from the network. Обычно в WCF, в результате односторонние вызовы возвращаются к клиенту быстрее, чем запрос ответ; Однако любое условие, замедляющее отправку исходящих данных по сети, одинаково замедляет односторонние операции, а также операции запроса ответа.Typically in WCF, this results in one-way calls returning to the client more quickly than request-reply; but any condition that slows the sending of the outbound data over the network slows one-way operations as well as request-reply operations. Дополнительные сведения см. в разделе служб односторонняя и доступ к службам, с помощью клиента WCF.For more information, see One-Way Services and Accessing Services Using a WCF Client.

В службе используется сертификат X.509, при этом получается исключение System.Security.Cryptography.CryptographicException.I’m using an X.509 certificate with my service and I get a System.Security.Cryptography.CryptographicException. В чем причина?What’s happening?

Обычно это происходит после изменения учетной записи пользователя, в которой выполняется рабочий процесс IIS.This commonly occurs after changing the user account under which the IIS worker process runs. Например, эта ошибка может возникнуть в Windows XPWindows XPпри изменении учетной записи по умолчанию, в которой выполняется процесс Aspnet_wp.exe, с ASPNET на пользовательскую учетную запись.For example, in Windows XPWindows XP, if you change the default user account that the Aspnet_wp.exe runs under from ASPNET to a custom user account, you may see this error. Если используется закрытый ключ, его процесс должен иметь разрешение для доступа к файлу с этим ключом.If using a private key, the process that uses it will need to have permissions to access the file storing that key.

В этом случае необходимо предоставить учетной записи процесса права доступа для чтения файла с закрытым ключом.If this is the case, you must give read access privileges to the process's account for the file containing the private key. Например, если рабочий процесс IIS выполняется в учетной записи Бориса, ему необходимо предоставить права доступа для чтения файла, содержащего закрытый ключ.For example, if the IIS worker process is running under the Bob account, then you will need to give Bob read access to the file containing the private key.

Дополнительные сведения о том, как предоставить учетной записи пользователя доступ к файлу, который содержит закрытый ключ для конкретного сертификата X.509 см. в разделе как: Предоставление доступа к WCF к сертификатам X.509.For more information about how to give the correct user account access to the file that contains the private key for a specific X.509 certificate, see How to: Make X.509 Certificates Accessible to WCF.

В имени первого параметра операции прописные буквы были заменены на строчные, и теперь в клиенте выдается исключение.I changed the first parameter of an operation from uppercase to lowercase; now my client throws an exception. В чем причина?What's happening?

Значения имен параметров в сигнатуры операции являются частью контракта и чувствительны к регистру.The value of the parameter names in the operation signature are part of the contract and are case-sensitive. Используйте атрибут System.ServiceModel.MessageParameterAttribute , чтобы различать имя локального параметра и метаданные, описывающие операцию для клиентских приложений.Use the System.ServiceModel.MessageParameterAttribute attribute when you need to distinguish between the local parameter name and the metadata that describes the operation for client applications.

При использовании одного из средств трассировки получено исключение EndpointNotFoundException.I’m using one of my tracing tools and I get an EndpointNotFoundException. В чем причина?What’s happening?

Если вы используете средство трассировки, который не является предоставляемой системой механизм трассировки WCF и вы получаете EndpointNotFoundException , указывает, что было несоответствие фильтра адресов, необходимо использовать ClientViaBehavior класс для направления сообщения в средство трассировки и иметь их дальнейшего перенаправления на адрес службы.If you are using a tracing tool that is not the system-provided WCF tracing mechanism and you receive an EndpointNotFoundException that indicates that there was an address filter mismatch, you need to use the ClientViaBehavior class to direct the messages to the tracing utility and have the utility redirect those messages to the service address. Класс ClientViaBehavior изменяет заголовок адресации Via , чтобы задать следующий сетевой адрес отдельно от конечного получателя, указанного заголовком адресации To .The ClientViaBehavior class alters the Via addressing header to specify the next network address separately from the ultimate receiver, indicated by the To addressing header. Однако при этом не следует изменять адрес конечной точки, используемый для установки значения To .When doing this, however, do not change the endpoint address, which is used to establish the To value.

В следующем примере кода показан пример файла конфигурации клиента.The following code example shows an example client configuration file.

<endpoint   
  address="http://localhost:8000/MyServer/"  
  binding="wsHttpBinding"  
  bindingConfiguration="WSHttpBinding_IMyContract"  
  behaviorConfiguration="MyClient"   
  contract="IMyContract"   
  name="WSHttpBinding_IMyContract">  
</endpoint>  
<behaviors>  
  <endpointBehaviors>  
    <behavior name="MyClient">  
      <clientVia viaUri="http://localhost:8001/MyServer/"/>  
    </behavior>  
  </endpointBehaviors>  
</behaviors>  

Что такое базовый адрес?What is the base address? Как он связан с адресом конечной точки?How does it relate to an endpoint address?

Базовый адрес - это корневой адрес для класса ServiceHost .A base address is the root address for a ServiceHost class. По умолчанию, если в конфигурацию службы добавлен класс ServiceMetadataBehavior , язык описания веб-служб (WSDL) для всех конечных точек, публикуемых узлом, извлекается из базового HTTP-адреса, относительного адреса, предоставленного поведением метаданных, а также "?wsdl".By default, if you add a ServiceMetadataBehavior class into your service configuration, the Web Services Description Language (WSDL) for all endpoints the host publishes are retrieved from the HTTP base address, plus any relative address provided to the metadata behavior, plus "?wsdl". Если вы знакомы с ASP.NET и IIS, базовый адрес эквивалентен виртуальному каталогу.If you are familiar with ASP.NET and IIS, the base address is equivalent to the virtual directory.

Совместное использование порта конечными точками службы и обмена метаданными при помощи NetTcpBindingSharing a port between a service endpoint and a mex endpoint using the NetTcpBinding

Если указать в качестве адреса базы службы net.tcp://MyServer:8080/MyService и добавить следующие конечные точки:If you specify the base address for a service as net.tcp://MyServer:8080/MyService and add the following endpoints:

<services>  
  <service name="Microsoft.Samples.NetTcp.CalculatorService">  
    <endpoint address="calcsvc" binding ="netTcpBinding" contract="Microsoft.Samples.NetTcp.ICalculator"/>  
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />  
  </service>  
</services>  

А если модифицировать один из параметров NetTcpBinding, как показано в следующем фрагменте конфигурации:And if you modify one of the NetTcpBinding settings as shown in the following configuration snippet:

<bindings>  
  <netTcpBinding>  
    <binding closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="11" maxReceivedMessageSize="65536">  
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>  
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>  
      </security>  
    </binding>  
  </netTcpBinding>  
</bindings>  

Вы получите сообщение об ошибке следующего вида: необработанное исключение: System.ServiceModel.AddressAlreadyInUseException: Уже есть прослушиватель на конечной точке IP 0.0.0.0:9000, которые можно обойти эту ошибку, указав полный URL-адрес с другой порт для конечной точки MEX, как показано в следующем фрагменте конфигурации:You will see an error like the following: Unhandled Exception: System.ServiceModel.AddressAlreadyInUseException: There is already a listener on IP endpoint 0.0.0.0:9000 You can work around this error by specifying a fully qualified URL with a different port for the MEX endpoint as shown in the following configuration snippet:

<services>  
  <service name="Microsoft.Samples.NetTcp.CalculatorService">  
    <endpoint address="calcsvc" binding ="netTcpBinding" contract="Microsoft.Samples.NetTcp.ICalculator"/>  
    <endpoint address="net.tcp://localhost:9001/servicemodelsamples/mex" binding="mexTcpBinding" contract="IMetadataExchange" />  
  </service>  
</services>  

При вызове приложения WCF Web HTTP из приложения WCF SOAP служба возвращает следующую ошибку: 405 Метод запрещенWhen calling a WCF Web HTTP application from a WCF SOAP application the service returns the following error: 405 Method Not Allowed

Вызов приложения WCF Web HTTP (службы, использующей WebHttpBinding и WebHttpBehavior) из WCF служба может создавать следующее исключение: Unhandled Exception: System.ServiceModel.FaultException1[System.ServiceModel.ExceptionDetail]: Удаленный сервер вернул неожиданный ответ: (405) метод не разрешено. "это исключение возникает, потому что WCF перезаписывает исходящий OperationContext входящим OperationContext.Calling a WCF Web HTTP application (a service that uses the WebHttpBinding and WebHttpBehavior) from a WCF service may generate the following exception: Unhandled Exception: System.ServiceModel.FaultException1[System.ServiceModel.ExceptionDetail]: The remote server returned an unexpected response: (405) Method Not Allowed.` This exception occurs because WCF overwrites the outgoing OperationContext with the incoming OperationContext. Чтобы решить эту проблему, создайте OperationContextScope в операции веб-службы HTTP WCF.To solve this problem create an OperationContextScope within the WCF Web HTTP service operation. Пример:For example:

public string Echo(string input)  
{  
    using (new OperationContextScope(this.InnerChannel))  
    {  
        return base.Channel.Echo(input);  
    }  
}  

См. такжеSee also