Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / The message with Action '' cannot be processed at the receiver, due to a ContractFilter... / 25 сообщений из 27, страница 1 из 2
19.09.2011, 12:07
    #37446051
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
Помогите, плз с конфигурацией WCF. Получаю вот такое адское сообщение

The message with Action 'PaymentContract' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).

Сама по себе моя (видимо неправильная конфигурация) вот такая

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
<?xml version="1.0"?>
<configuration>

  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="InPlatGateway.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
	<appSettings>
		<add key="CertNumber" value="4E6DD57E"/>
	</appSettings>
	<connectionStrings>
		<add name="SQLServer_ConnectionStrings" connectionString="HOST=ZZZZZZZ;PORT=5432;PROTOCOL=3;DATABASE=YYYYYYY;USER ID=XXXXXXXX;POOLING=True;CONNECTIONLIFETIME=0;MINPOOLSIZE=1;MAXPOOLSIZE=1024;COMMANDTIMEOUT=200;INTEGRATED SECURITY=False;" providerName="Npgsql"/>
	</connectionStrings>
	
  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <client>
      <endpoint address="InPlatGateway.svc" binding="basicHttpBinding"
        bindingConfiguration="NewBinding0" contract="InPlatGateway.IInPlatGateway">
        <identity>
          <certificateReference findValue="4E6DD57E" />
        </identity>
      </endpoint>
    </client>
    <bindings>
      <basicHttpBinding>
        <binding name="NewBinding0">
          <security>
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <diagnostics>
      <messageLogging logEntireMessage="true" logKnownPii="true" logMalformedMessages="true"
        logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
      <endToEndTracing propagateActivity="true" activityTracing="true"
        messageFlowTracing="true" />
    </diagnostics>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  
  <applicationSettings>
    <InPlatGateway.My.MySettings>
      <setting name="InPlatGateway_ru_inplat_merchant_demo_ShopService"
        serializeAs="String">
        <value>https://merchant-demo.inplat.ru/</value>
      </setting>
      <setting name="InPlatGateway_ru_inplat_merchant_demo1_PaycashShopService"
        serializeAs="String">
        <value>https://your_shop_host/</value>
      </setting>
      <setting name="InPlatGateway_ru_asp_net_calc_InPlatGateway" serializeAs="String">
        <value>http://calc.asp-net.ru/InPlatGateway.svc</value>
      </setting>
      <setting name="InPlatGateway_localhost_InPlatGateway" serializeAs="String">
        <value>http://localhost: 1451 /InPlatGateway.svc</value>
      </setting>
    </InPlatGateway.My.MySettings>
  </applicationSettings>
	<system.diagnostics>
		<sources>
			<source name="System.ServiceModel"
     switchValue="Verbose, ActivityTracing"
     propagateActivity="true" >
				<listeners>
					<add name="xml" />
				</listeners>
			</source>
			<source name="System.ServiceModel.MessageLogging"
     switchValue="Verbose">
				<listeners>
					<add name="xml" />
				</listeners>
			</source>
		</sources>
		<sharedListeners>
			<add name="xml"
     type="System.Diagnostics.XmlWriterTraceListener"
     initializeData="c:\WCF_log.xml" />
		</sharedListeners>
		<trace autoflush="true" />
	</system.diagnostics>
</configuration>

Это двухсторонний SOAP-Сервис. Я выдаю запросы к внешнему сервису с клиентским сертификатом, он возвращает мне свои ответы по HTTP (без SSL) - то есть мне нужна SSL при входах в мой сервис.
"Туда" все работает отлично. Но ко мне ничего не проходит. В чем здесь грабли?

Ситация осложняется следующим - я могу сделать ТЕСТ сервиса из своих же локальных страничек в этом же узле (где работает сервис InPlatGateway.svc?wsdl) и могу подергать сервис (на хостинге) из Альтовы на девелоперской машины - все летает отлично. На девелоперской машине тоже все летает. Неверная (в чем-то) конфигурация WCF именно на хостинге. Узел certificateReference в конфигурацию я добавил только что для эксперимента - хоть с ним, хоть без него - ничего не работает. Внешний клиент видит только вышеупомянутую ошибку WCF.
...
Рейтинг: 0 / 0
19.09.2011, 12:10
    #37446060
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
слишком узкий конктекст. не понять че у тебя.
напиши по-русски чтоли.чтобы мысль была первее набора букв.
...
Рейтинг: 0 / 0
19.09.2011, 12:16
    #37446074
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
если бы я знал что ИМЕННО тебе нужно уточнить - я бы уточнил
...
Рейтинг: 0 / 0
19.09.2011, 12:19
    #37446086
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
вот тест из Альтовы - все летает - а клиент видит только сообщение об ошибке (которое в титуле)
...
Рейтинг: 0 / 0
19.09.2011, 12:21
    #37446092
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
причем это тест НЕ С ЛОКАЛЬНОЙ МАШИНЫ, а с УДАЛЕННОЙ - и все работает

что надо уточнить? любые логи - все отдам
...
Рейтинг: 0 / 0
19.09.2011, 12:22
    #37446093
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
В IIS крнечно выставлено, что требует SSl подключения? Вообще, к чему все мудрости с двусторонним сервисом? Чем не устраивает обычный wsHttpBinding, который тоже зашифрован.
...
Рейтинг: 0 / 0
19.09.2011, 12:40
    #37446132
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
нет, в IIS не выставлено НИЧЕГО
сертифкат подключается В КОДЕ - вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Class Gate

    Dim ShopService1 As ru.inplat.merchant_remote.ShopService

    Public Sub New()
        ShopService1 = New ru.inplat.merchant_remote.ShopService
        Dim ShopServiceCert As System.Security.Cryptography.X509Certificates.X509Certificate2
        Dim CertStore As System.Security.Cryptography.X509Certificates.X509Store = New System.Security.Cryptography.X509Certificates.X509Store
        CertStore.Open(System.Security.Cryptography.X509Certificates.OpenFlags.MaxAllowed)
        For Each OneCert As System.Security.Cryptography.X509Certificates.X509Certificate2 In CertStore.Certificates
            If OneCert.SerialNumber = System.Configuration.ConfigurationManager.AppSettings("CertNumber") Then
                ShopServiceCert = OneCert
                GoTo OK1
            End If
        Next
        Throw New Exception("No certificate " & System.Configuration.ConfigurationManager.AppSettings("CertNumber"))
OK1:    ShopService1.ClientCertificates.Add(ShopServiceCert)
    End Sub

....

и это правильно. Для WCF в IIS клиентские сертифкаты не выставляются. Это уже проехали. Именно таким образом реквесты ОТЛИЧНО уходят зашифрованными по SSL.

Но это ДВУХСТОРОННИЙ SOAP-сервис (не я это придумал). Туда должно уходить по SSL - обратно можно и по-простецки. Так вот туда все уходит по таким образом сформированному SSL.
А в обратную сторону (то есть мой сервис - который дергается клиентом) он голый, практически незащищенный. Так сделано потому чтобы не возиться с SSL на хостинге (для простоты, если угодно). Сложно тут поднимать SSL (точнее невозможно) - айпишники заняты на другие узлы с SSL.

То есть в сухом остатке с точки зрения клиента это должен быть ОБЫЧНЫЙ незащищенный WCF. И проблема в том, что он РАБОТАЕТ ПРЕВОСХОДНО - пока запросы делаю я, но когда удаленный сервис пытается войти ко мне (в ответ на мои SSL-запросы к нему) - то он видит не то, что видят мои тесты из этого же узла http://calc.asp-net.ru/ и не то, что видит АЛЬТОВА (скрины выше) - а видит ТОЛЬКО ОШИБКУ (которая вначале топика)

Я эту ситуацию расцениваю как неверный конфиг на хостинге (он тоже в первом посте показан). Хотя возможно я ошибаюсь. Другие незащищенные WCF сервисы у меня на этом же хостинге работают отлично. А именно вот этот не работает.

Ведь дело именно в конфиге?
...
Рейтинг: 0 / 0
19.09.2011, 12:53
    #37446160
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
Понял, не Duplex.

В ошибке четко говорится, что сервис не соответствует запросу клиента, при чем в самом начале запроса, т.е. проблема судя по всему в контексте безопасности.
...
Рейтинг: 0 / 0
19.09.2011, 13:00
    #37446177
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
Насколько я понимаю, этот конфиг, того сервиса, что дергает удаленный клиент. Так вот здесь четко прописан транспорт <transport clientCredentialType="Certificate" />
Что же вы ждете? Клиент ждет валидный сертификат от вашего сервиса. Однозначно.
...
Рейтинг: 0 / 0
19.09.2011, 13:03
    #37446182
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
Да. А обращается по незащищенному соединению.
Где-то есть опция принимать оба типа подключения.
...
Рейтинг: 0 / 0
19.09.2011, 13:37
    #37446242
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
да, n_string - все абсолютно точно:

1. не дуплекс (ко мне SSL затруднительно ставить)
2. очевидно - что дело в безопасности (ведь ИНОГДА сервис-то работает превосходно)
3. да, это конфиг моего сервиса, который должен дергать удаленный клиент
4. да, в этой конфигурации видимо ждет сертификата, загруженного статически именно от IIS
5. видимо да, есть такая опция

поэтому проводим такой эксперимент - выкидываем нах ОБЕ секции (и client и bindings)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    <client>
      <endpoint address="InPlatGateway.svc" binding="basicHttpBinding"
        bindingConfiguration="NewBinding0" contract="InPlatGateway.IInPlatGateway">
        <identity>
          <certificateReference findValue="4E6DD57E" />
        </identity>
      </endpoint>
    </client>
    <bindings>
      <basicHttpBinding>
        <binding name="NewBinding0">
          <security>
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

то есть SSL от меня идет по сертификату подключеного динамически ИЗ КОДА (а не из IIS), а об обратном SSL ВОООБЩЕ нет никакого упоминания в конфигурации.

результат плачевный - НЕ ИЗМЕНИЛОСЬ НИЧЕГО - от меня идут замечательные отлично зашифрованные SSL - а когда клиент (в ответ на мои SSL запросы) пытается ответить мне - он видит только ту же самую ошибку

The message with Action 'PaymentContract' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
...
Рейтинг: 0 / 0
19.09.2011, 13:40
    #37446246
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
и альтовой сейчас прверил - без этих двух секций ничего не изменилось
...
Рейтинг: 0 / 0
19.09.2011, 13:51
    #37446268
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
Какая разница, как вы определите конфигурацию императивно или декларативно, результат будет одинаковый.

авторто есть SSL от меня идет по сертификату подключеного динамически ИЗ КОДА (а не из IIS), а об обратном SSL ВОООБЩЕ нет никакого упоминания в конфигурации.

Давайте уточним:
"От вас", я так понимаю, это вы запрашиваете удаленный сервис, который требует SSL соединение.
Ваш сервис, который запрашивает удаленный клиент, это то, что вы опубликовали здесь.

Верно?
...
Рейтинг: 0 / 0
20.09.2011, 13:06
    #37447903
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
да, все так
...
Рейтинг: 0 / 0
21.09.2011, 12:36
    #37449566
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
так что - есть у кого-нибудь ХОТЬ КАКИЕ-НИБУДЬ идеи?
или еще что-нибудь надо уточнить дополнительно?

спросил и на других форумах, даже у самого MS - http://social.msdn.microsoft.com/Forums/ru-RU/securityru/thread/fea97b56-0dfb-4ed5-8ec0-bd36d1d11f34

Все - полный молчок и даже НИКАКИХ ПРЕДПОЛОЖЕНИЙ сделать не могут о причинах адского сообщения.
...
Рейтинг: 0 / 0
21.09.2011, 14:09
    #37449847
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
как идея, спроси на английском форуме ms)
и stackoverflow еще пошерсти.

просто до сих мне, не понятен смысл твоей проблемы.

еще как идея, переделай ssl через winhttpcfg .
я сам предпочитаю этот способ, программному.
...
Рейтинг: 0 / 0
21.09.2011, 16:51
    #37450266
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
ну на анлоглоязычный я вопрос сегодня повешу
...
Рейтинг: 0 / 0
21.09.2011, 16:58
    #37450282
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
просто до сих мне, не понятен смысл твоей проблемы. а смысл проблемы в том, что ДО выполнения обмена сообщений (который вполне удачно происходит на тестах - например с девелоперской машины из Альтовы (скрины выше) )

до выпонения обмена данными ЧТО-ТО начинает проверять виндузня
что-то проверила и выругалась

ну и что я смог придумать - чтобы отключить проверку безопасности - я все перепробовал, например атрибуты
<ServiceContract(ProtectionLevel:=Net.Security.ProtectionLevel.None)>
...
Рейтинг: 0 / 0
22.09.2011, 10:50
    #37451178
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
Вы говорите, что соединение незащищенное, а сами указываете сертификат в конфиге.
Кстати не пропадайте, если хотите найти решение.
...
Рейтинг: 0 / 0
22.09.2011, 12:46
    #37451477
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
спс. я не пропадаю - это надо решить
...
Рейтинг: 0 / 0
22.09.2011, 12:56
    #37451508
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
черт, нажимаю CTRL-ENTER как в скайпе (чисто на автомате) - чтобы перейти на следующую строку
а получается закрывшийся пост, сорри

так вот, блок с сертификатом я убрал - но это НИЧЕГО не изменило
насколько я могу понять - этот блок конфига управляет сертификатом, загруженным в IIS - я просто хотел в этом убедиться
никакого значения для сертифката загруженного программно - этот блок (по моему пониманию) не имеет

а номер сертифката в Application указан для кода
этот сетификат подключается для исходящих соединений от меня ТУДА - и этот блок работает отлично

а вот ОБРАТНО - то есть вызовы моего сервиса сторонним сервисом НЕ ПРОХОДЯТ
и здесь мне никакого сертификата не нужно (ну это я уже подробно описывал)

у меня есть просто определение интерфейса
я могу добавить к нему ЛЮБОЙ атрибут, например Net.Security.ProtectionLevel.None
и ожидаю от виндузни, что она НЕ БУДЕТ делать никаких ненужных и непрогнозируемых проверок
а просто предоставит доступ к моему SOAP-сервису КОМУ УГОДНО

но она что-то свое проверяет (о чем индусы-программисты видимо никому так и не рассказали) - и ЗАПРЕЩАЕТ доступ к моему сервису ПОЧТИ ВСЕМ
почему-то разрешая доступ из того же узла (или с девелоперского кампутера)

ну если конечно моя проблема - это проблема безопасности.... может быть тут что-то другое вообще?

я хочу еще попробовать ProcMon-ом потрасировать до какого момента доходит реквест
...
Рейтинг: 0 / 0
22.09.2011, 13:22
    #37451554
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
ИдеальнаяСУБДтак вот, блок с сертификатом я убрал - но это НИЧЕГО не изменило
насколько я могу понять - этот блок конфига управляет сертификатом, загруженным в IIS - я просто хотел в этом убедиться
никакого значения для сертифката загруженного программно - этот блок (по моему пониманию) не имеет

а номер сертифката в Application указан для кода
этот сетификат подключается для исходящих соединений от меня ТУДА - и этот блок работает отлично

а вот ОБРАТНО - то есть вызовы моего сервиса сторонним сервисом НЕ ПРОХОДЯТ
и здесь мне никакого сертификата не нужно (ну это я уже подробно описывал)

Почему вы всегда объединяете эти два совершенно разных приложения с различными задачами?

Вы меня вводите в заблуждение.

У вас есть веб сервис, который вызывается удаленным клиентом, ТАК?

Все, точка, больше никаких функций ваш сервис не выполняет. Только отвечает удаленному клиенту.
...
Рейтинг: 0 / 0
22.09.2011, 14:15
    #37451688
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
ну пусть так.


но кажется я понял в чем тут грабли

чудо движок WCF мщет конфиг не там, где он должен быть
естественно, если конфига у сервиса нет - то и нет привязки между точкой доступа и модулем, который слушает эту точку доступа

на скрине видно, что конфиг сервиса ищется в папке ~/InPlatGateway.svc/web.config - а нужно-то искать в папке ~/web.config

щас переделаю все (с учетом чудо-мнения индуса-программиста о месте расположения конфига) - и если дело в этом - поймаю первого попавшегося индуса и задушу его собственной чалмой (он ответит за всех индусов сразу - которые так и не поняли что конфиг сервиса лежит в той же папке, где и находится сам SVC)
...
Рейтинг: 0 / 0
22.09.2011, 17:12
    #37452119
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
переделал с конфигом сервсиа в другой папке - но на работу сервиса это не повлияло - та же ошибка

проверили протокол глазками - все точно - на всех тестах - протокол правильный

проверено было всеми возможными инструментами - например микрософтовским тестером SOAP
убедились, что протокол полностью корректен
...
Рейтинг: 0 / 0
22.09.2011, 17:22
    #37452142
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
и было проверено wireshark'ом - все тоже работает корректно

сейчас мой сервис работает НА ВСЕХ ТЕСТАХ:

1. на запросах с моих ASPX-страничек (с другой машины)
2. выше лежит скрин проверки альтовой (с другой машины)
3. в предыдущем топике лежит скрин проверки сервиса микрософтовским SOAP-тестером
4. тут скрин проверки корректности сервиса варешарком (тоже запросы с другой машины)
5. на соседних узлах лежит куча аналогичных и нормально работающих SOAP-сервисов

мое мозгозаключение - обращение к моему сервису выполняется некорректно
обращение производится каким-то своим собственным самописным софтом на PHP
(а при обращении из него и возникает исходная ошибка с которой начался топик)
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / The message with Action '' cannot be processed at the receiver, due to a ContractFilter... / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]