powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Один WCF сервис - два контракта. Траблы
7 сообщений из 7, страница 1 из 1
Один WCF сервис - два контракта. Траблы
    #38019834
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею WCF сервис.
Методов стало много, начал разделять их по отдельным контрактам.

Сделал два интерфейса:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    
    [ServiceContract, XmlSerializerFormat]
    public interface ILcrVoicePart
    {
      ...
     }


[ServiceContract, XmlSerializerFormat]
	public interface ILcrWebService
	{
}
...
Рейтинг: 0 / 0
Один WCF сервис - два контракта. Траблы
    #38019862
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею WCF сервис. Хостинг - IIS 7.
Методов стало много, начал разделять их по отдельным контрактам.

Сделал два интерфейса:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    
    [ServiceContract, XmlSerializerFormat]
    public interface ILcrVoicePart
    {
      ...
     }


    [ServiceContract, XmlSerializerFormat]
    public interface ILcrWebService
   {
    ...
    }



Класс само собой наследуется от обоих интерф.

Код: c#
1.
2.
3.
4.
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    public partial class LcrWebService : ILcrWebService, ILcrVoicePart
   {
    }





Настроил WCF-конфиг, добавив туда два ендпоинта: один назван Mmts, другой назван Voice

Код: xml
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.
<system.serviceModel>
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
         <bindings>
		<basicHttpBinding>
		     <binding name="basicBinding" closeTimeout="23:59:59" openTimeout="23:59:59" 
                        receiveTimeout="24.20:31:23.6470000" sendTimeout="23:59:59" maxBufferSize="2147483647" 
                        maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
			<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"  
                             maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
					<security mode="TransportCredentialOnly">
						<transport clientCredentialType="Windows" />
					</security>
				</binding>
			</basicHttpBinding>
		</bindings>
		<services>
   <service behaviorConfiguration="basicBehavior" name="LcrWebServer.LcrWebService">
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
     contract="IMetadataExchange" />
    <endpoint address="mmts" behaviorConfiguration="endpointBehavior"
     binding="basicHttpBinding" bindingConfiguration="basicBinding"
     name="MmtsProxy" contract="LcrWebServer.ILcrWebService" />
    <endpoint address="voice" behaviorConfiguration="endpointBehavior"
     binding="basicHttpBinding" bindingConfiguration="basicBinding"
     name="VoiceProxy" contract="LcrWebServer.ILcrVoicePart" />
    <host>
     <timeouts closeTimeout="00:03:00" openTimeout="00:10:00" />
    </host>
   </service>
  </services>
		<behaviors>
   <endpointBehaviors>
    <behavior name="endpointBehavior" />
   </endpointBehaviors>
   <serviceBehaviors>
    <behavior name="basicBehavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug httpsHelpPageEnabled="false" includeExceptionDetailInFaults="true" />
     <serviceAuthorization impersonateCallerForAllOperations="false" />
     <serviceThrottling maxConcurrentCalls="16" maxConcurrentInstances="10" />
    </behavior>
    <behavior name="">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
	</system.serviceModel>eModel>




Перегенерил прокси в клиенте и вот какое дело.

клиентский web.config
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<client>

<appSettings>
	<add key="LcrServiceReference.LcrWebService" value="http://localhost/LcrWebService/LcrWebService.svc/mmts"/>
</appSettings>

<endpoint address="http://localhost/LcrWebService/LcrWebService.svc/mmts" 
   binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" contract="LcrWebServer.ILcrWebService" 
   name="basicHttpBinding_ILcrWebService"/>

<endpoint address="http://localhost/LcrWebService/LcrWebService.svc/voice" 
    binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" contract="LcrWebServer.ILcrVoicePart" 
   name="basicHttpBinding_IVoiceWebService"/>
</client>



Если обращаться к методам из ILcrWebService то все нормально,
а вот если дернуть метод из ILcrVoicePart вылетает ошибка:

The message with Action 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
Один WCF сервис - два контракта. Траблы
    #38019871
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю

если в строке клиентских настроек

<appSettings>
<add key="LcrServiceReference.LcrWebService" value=" http://localhost/LcrWebService/LcrWebService.svc/ mmts "/>
</appSettings>

заменить на

<appSettings>
<add key="LcrServiceReference.LcrWebService" value=" http://localhost/LcrWebService/LcrWebService.svc/ voice "/>
</appSettings>


то я получаю заркальное отображение ошибки:

Если обращаться к методам из ILcrWebService то ОШИБКА,
а вот если дернуть метод из ILcrVoicePart все нормально:

если постфикс вообще убрать и перегенерить прокси - получаю HTTP error 404 на вызов метода из любого контракта


какие мысли коллеги?
...
Рейтинг: 0 / 0
Один WCF сервис - два контракта. Траблы
    #38020203
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hstas,

сделать интерфейс
Код: c#
1.
ILcrService : ILcrWebService, ILcrVoicePart


и использовать его.
...
Рейтинг: 0 / 0
Один WCF сервис - два контракта. Траблы
    #38020458
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

Нет, это проблему не решает. Симптоматика один в один остается.
...
Рейтинг: 0 / 0
Один WCF сервис - два контракта. Траблы
    #38020586
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hstas,

у меня решает)) Вы что оставили 2 эндпоинта чтоли?) смысл в замене 2 конечных точек на 1)
...
Рейтинг: 0 / 0
Один WCF сервис - два контракта. Траблы
    #38020591
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

Ну собственно да. Целей стояло две. Разделить код для удобства. И сделать два контракта, и два эндпоинта (использовать сервис удобнее)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Один WCF сервис - два контракта. Траблы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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