powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF. Внешний IP. Ошибка
11 сообщений из 11, страница 1 из 1
WCF. Внешний IP. Ошибка
    #38971499
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 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
WCF. Внешний IP. Ошибка
    #38971530
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала:
Так какой порт используется?

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



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

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


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

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


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

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

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

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

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

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



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

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

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


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