У меня есть веб приложение MVC в него встроен wcf сервис. При отладке и разработке никаких проблем с ним не возникало, а как только я развернул приложение на удаленном сервере у меня не получается присоедениться к сервису. Происходит ошибка: "Клиенту не удалось завершить согласование безопасности в течение заданного периода ожидания (00:00:00). Текущим сегментом согласования является 1 (00:00:00).
.
По этому поводу я прочитал, что такое может происходить если логин и пароль при подключении к серверу могут быть указаны неправильно, но у меня две одинаковые бд, что на машине для разработке, что на сервере. Когда я запускаю сервер и клиент на одной машине все работает прекрасно. Как только я пытаюсь подключится клиентом к удаленному серверу вылезает ошибка, которую я писал выше.
Клиент:
var callback = new VWCallBackClientDebug();
callback.LookArived += Callback_LookArived;
callback.CallbackArrived += Callback_CallbackArrived;
callback.LooksArived += Callback_LooksArived;
EndpointAddress endpoint = new EndpointAddress("http://x.x.x.x/Models/WcfService/Service1.svc");
client = new VWServiceClient(new InstanceContext(callback), "WSDualHttpBinding_IVWService", endpoint);
client.ClientCredentials.UserName.UserName = "login";
client.ClientCredentials.UserName.Password = "password";
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
client.Subscribe();
client.GetLooks();
Timer.Start();
timer_callback(Timer, null);
Конфигурация клиента:
<system.serviceModel>
<bindings>
<wsDualHttpBinding>
<binding name="WSDualHttpBinding_IVWService"
>
<security>
<message clientCredentialType="UserName" />
</security>
</binding>
</wsDualHttpBinding>
</bindings>
<client>
<endpoint address="http://х.х.х.х/Models/WcfService/Service1.svc"
binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IVWService"
contract="VWService.IVWService" name="WSDualHttpBinding_IVWService">
<identity>
<dns value="х.х.х.х" />
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="behaviour">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Сертификаты использую самоподписанные, стоят и на сервере, и на клиенте.
Конфигурация серверной стороны следующая:
<system.serviceModel>
<services>
<service name="AppolloAdmin.Models.WcfService.Service1" behaviorConfiguration="Behavior1">
<host>
<baseAddresses>
<add baseAddress="http://х.х.х.х" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- Если адрес не задан полностью, он является относительным к вышеуказанному базовому адресу -->
<endpoint address="" binding="wsDualHttpBinding" contract="AppolloAdmin.Models.WcfService.IVWService" bindingConfiguration="Binding1" behaviorConfiguration="Behavior2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- Служба использует конечную точку Metadata Exchange для предоставления своего описания клиентам. -->
<!-- Эта конечная точка не использует безопасную привязку и должна быть защищена или удалена перед развертыванием -->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="Behavior2">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Behavior1">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<serviceCertificate findValue="х.х.х.х" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="AppolloAdmin.Models.WcfService.ClientAuthentification, AppolloAdmin" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsDualHttpBinding>
<binding name="Binding1" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsDualHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
</serviceHostingEnvironment>
Ну и если это необходимо то вот так сервис запускается в MVC приложении
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
//routes.IgnoreRoute("{resource}.svc");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(Service1)));
}
P.S. При запуске MVC приложение через студию возникает предупреждение, я предполагаю, что в этом может быть зарыта проблема, но ничего конкретного я в интернете не нашел.
Нашел еще похожую проблему http://www.cyberforum.ru/web-services-wcf/thread1023169.html , но там ее не решили
Доброго времени сутокПодскажите, можно ли каким то образом, изменить HTML/CSS код страницы, к которой мы подключаемся? Чтобы например тот же yandex