powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
25 сообщений из 27, страница 1 из 2
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446051
Помогите, плз с конфигурацией 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
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446060
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слишком узкий конктекст. не понять че у тебя.
напиши по-русски чтоли.чтобы мысль была первее набора букв.
...
Рейтинг: 0 / 0
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446074
если бы я знал что ИМЕННО тебе нужно уточнить - я бы уточнил
...
Рейтинг: 0 / 0
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446086
вот тест из Альтовы - все летает - а клиент видит только сообщение об ошибке (которое в титуле)
...
Рейтинг: 0 / 0
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446092
причем это тест НЕ С ЛОКАЛЬНОЙ МАШИНЫ, а с УДАЛЕННОЙ - и все работает

что надо уточнить? любые логи - все отдам
...
Рейтинг: 0 / 0
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446093
Фотография n_string
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В IIS крнечно выставлено, что требует SSl подключения? Вообще, к чему все мудрости с двусторонним сервисом? Чем не устраивает обычный wsHttpBinding, который тоже зашифрован.
...
Рейтинг: 0 / 0
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446132
нет, в 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
The message with Action '' cannot be processed at the receiver, due to a ContractFilter...
    #37446160
Фотография n_string
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, не Duplex.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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