Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF. Внешний IP. Ошибка / 11 сообщений из 11, страница 1 из 1
29.05.2015, 10:00
    #38971499
timur999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
Есть WCF сервис.
Вот конфиг:

Код: 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.
<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
	<system.web>
		<compilation debug="true" targetFramework="4.5" />
		<httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="600" />
	</system.web>
	<system.serviceModel>
		<behaviors>
			<serviceBehaviors>
				<behavior name="SyncWcfServices.MainServiceBehavior">
					<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
					<serviceDebug includeExceptionDetailInFaults="true" />
				</behavior>
			</serviceBehaviors>
		</behaviors>
		<bindings>
			<wsHttpBinding>
				<binding name="ExtendedMaxSize" maxReceivedMessageSize="2147483647"></binding>
			</wsHttpBinding>
		</bindings>
		<services>
			<service name="SyncWcfServices.MainService" behaviorConfiguration="SyncWcfServices.MainServiceBehavior">
				<endpoint address="" binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" contract="SyncWcfServices.IMainService">
					<identity>
						<dns value="localhost" />
					</identity>
				</endpoint>
				<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
				<host>
					<baseAddresses>
						<add baseAddress="http://localhost:8733/Design_Time_Addresses/SyncWcfServices/MainService/" />
					</baseAddresses>
				</host>
			</service>
		</services>
		<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
	</system.serviceModel>
</configuration>




В качестве сервера использую IIS. В IIS создал веб-сайт с привязкой к некоторому порту.
Для обмена данными с сервисом используется клиентское десктоп приложение.
Вот кусок кодя для загрузки данных:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public BMS_SYNC_DOC[] GetDocuments(POSAuthorizationModel data)
{
	using (var service = this.GetSyncService())
	{
		return service.GetDocuments(data);
	}
}

private MainServiceClient GetSyncService()
{
	var service = new MainServiceClient();
	service.Endpoint.Address = new EndpointAddress(Configuration.SyncServiceUrl);

	return service;
}


Во внутренней сетке все работает замечательно. Т.е. если, к примеру, Configuration.SyncServiceUrl = "192.168.0.111:3333/SyncService.svc".

Проблема при попытке подключения из внешнего мира по внешнему IP адресу:
Например, Configuration.SyncServiceUrl = "25.35.45.55:3333/SyncService.svc".

При этом если открыть ссылку "25.35.45.55:3333/SyncService.svc" в броузере можно видеть описание сервиса.

Ошибка:

Код: c#
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.
The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.

Server stack trace: 
   at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
   at System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
   at System.ServiceModel.ClientBase`1.Close()
   at System.ServiceModel.ClientBase`1.System.IDisposable.Dispose()
   at SyncCore.Helpers.ServiceHelper.GetDocuments(POSAuthorizationModel data)
   at SyncClient.MainWindow.<>c__DisplayClass4.<ReloadData>b__3()
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at SyncClient.MainWindow.<ReloadData>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at SyncClient.MainWindow.<Reload>d__0.MoveNext()




Подозрения, что неправильно настроен веб-сайт. Но что именно не знаю.
У кого есть подобный опыт, поделитесь, пожалуйста.
...
Рейтинг: 0 / 0
29.05.2015, 10:18
    #38971530
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
Для начала:
Так какой порт используется?

Код: c#
1.
http://localhost:8733/Design_Time_Addresses/SyncWcfServices/MainService/



8733 или 3333 ?
...
Рейтинг: 0 / 0
29.05.2015, 10:28
    #38971544
timur999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
Ни тот ни другой :) Все адреса и порты вымышленные.

Реальный порт 8095. Только как это может помочь?
Ведь на самом деле этого адреса:
Код: c#
1.
http://localhost:8733/Design_Time_Addresses/SyncWcfServices/MainService/


не существует.
...
Рейтинг: 0 / 0
29.05.2015, 10:31
    #38971550
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
timur999Ни тот ни другой :) Все адреса и порты вымышленные.

Реальный порт 8095. Только как это может помочь?
Ведь на самом деле этого адреса:
Код: c#
1.
http://localhost:8733/Design_Time_Addresses/SyncWcfServices/MainService/


не существует.

вы задали вопрос, привели конфиг, пример, в котором указаны явно два разных порта . Я ответил, что так как описано - ошибка в адресе.

Как теперь звучит ваш вопрос?
...
Рейтинг: 0 / 0
29.05.2015, 10:50
    #38971595
timur999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
Спасибо за попытку помочь, Winnipuh.
К сожалению Ваш вариант не помог.

Может кто-нибудь еще с такой проблемой сталкивался?
...
Рейтинг: 0 / 0
29.05.2015, 11:10
    #38971624
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
timur999, порты открыты на фиреволе... маршрутизация настроена? поди ваш иис сидит за натом...? Или я вопроса не понял и конфигурации вашего окружения?
...
Рейтинг: 0 / 0
29.05.2015, 11:34
    #38971652
timur999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
buser,

Да IIS за Firewall. Маршрутизация настроена и порты открыты. Мне не совсем понятно как такое происходит - во внутренней сети все нормально работает.

Кстати, забыл, вот конфиг клиента

Код: c#
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.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<configSections>
		<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
		<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
	</configSections>
	<entityFramework>
		<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
			<parameters>
				<parameter value="v11.0" />
			</parameters>
		</defaultConnectionFactory>
		<providers>
			<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
		</providers>
	</entityFramework>
	<system.serviceModel>
		<bindings>
			<wsHttpBinding>
				<binding name="WSHttpBinding_IMainService" />
			</wsHttpBinding>
		</bindings>
		<client>
			<endpoint address="http://localhost/SyncService/SyncService.svc"
			 binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMainService"
			 contract="SyncServiceReference.IMainService" name="WSHttpBinding_IMainService">
				<identity>
					<dns value="localhost" />
				</identity>
			</endpoint>
		</client>
	</system.serviceModel>
</configuration>




Может здесь что не так?
...
Рейтинг: 0 / 0
29.05.2015, 12:36
    #38971720
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
timur999Мне не совсем понятно как такое происходит - во внутренней сети все нормально работает.Надо, чтобы на NAT не менялся порт. В противном случае потребуются дополнительные настройки в WCF для отключения этой проверки.
...
Рейтинг: 0 / 0
29.05.2015, 12:39
    #38971725
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
timur999
Код: c#
1.
2.
3.
4.
	using (var service = this.GetSyncService())
	{
		return service.GetDocuments(data);
	}

Не надо напрямую использовать using к WCF-каналу/клиенту. Из-за этого не видно первой ошибки, возникшей внутри using. Видно только ошибку, возникшую при выполнении Dispose, которая ни о чём не говорит.
...
Рейтинг: 0 / 0
29.05.2015, 14:28
    #38971869
timur999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
Спасибо Алексей К!

Код: c#
1.
 using (var service ...



это зло. Реальная ошибка не отображалась в логах. Проблема была в авторизации. Изменил в web.config сервиса параметры binding:
security mode="None" и transport clientCredentialType="None".
...
Рейтинг: 0 / 0
29.05.2015, 14:32
    #38971877
timur999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Внешний IP. Ошибка
Да и правильно советовал Winnipuh!

Порт надо прописывать в endpoint соответствующий.
Просто злосчастный using скрыл от меня эти подробности :)

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


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