Я столкнулся с «интересной» ошибкой с моим веб-сервисом WCF JSONP. Это единственный, который у меня есть, и он предоставляет только один метод. Если я ударил свою службу через веб-браузер внутренне, он выдает сообщение о том, что, фактически, MEX не включен (true). Если я ударил его из-за пределов нашей сети (например, если бы вы были на машине в моей компании), он просто сидит и, наконец, истекает. URL-адрес: http://demo.rivworks.com/services/Negotiate.svc. Любые идеи относительно того, что может вызвать такое поведение?C# WCF работает внутри корпоративного брандмауэра, но не снаружи
Вот web.config:
<!-- WCF configuration -->
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="JsonpServiceBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="RivWorks.Web.Service.NegotiateService">
<endpoint address=""
binding="customBinding"
bindingConfiguration="jsonpBinding"
behaviorConfiguration="JsonpServiceBehavior"
contract="RivWorks.Web.Service.INegotiateService" />
</service>
</services>
<extensions>
<bindingElementExtensions>
<add name="jsonpMessageEncoding" type="RivWorks.Web.Service.JSONPBindingExtension, RivWorks.Web.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bindingElementExtensions>
</extensions>
<bindings>
<customBinding>
<binding name="jsonpBinding" >
<jsonpMessageEncoding />
<httpTransport manualAddressing="true"/>
</binding>
</customBinding>
</bindings>
</system.serviceModel>
</configuration>
Вот код:
namespace RivWorks.Web.Service
{
//----------------------------------------------------------------------------------------------------------//
// Data class //
//----------------------------------------------------------------------------------------------------------//
[DataContract(Name = "NegotiateSetup", Namespace = "http://rivworks.com/DataContracts/2009/01/15")]
public class NegotiateSetup : INegotiationInitialize
{
#region Declarations
...
#endregion
#region INegotiationInitialize Members
...
#endregion
}
//----------------------------------------------------------------------------------------------------------//
// Service Implementation //
//----------------------------------------------------------------------------------------------------------//
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class NegotiateService : INegotiateService
{
public NegotiateService() { }
public INegotiationInitialize GetSetup(string method, string jsonInput)
{
...
return resultSet;
}
}
}
Я после того, как несколько вещей здесь:
- Почему я могу НЕ ударил его из-за пределов моей локальной сети?
- Как я могу получить MEX работает правильно
Примечание: Я использую классы JSONP найти здесь: http://msdn.microsoft.com/en-us/library/cc716898.aspx
Вы исключили правила брандмауэра? Например, если вы ставите статическую страницу на этом компьютере, вы можете связаться с ней за пределами брандмауэра? – itowlson
Ответ, кажется, нет. Я ** должен ** быть в состоянии ударить http://demo.rivworks.com/login.aspx, но я не могу, и это тоже время. Это сервер RackSpace, так что в понедельник я буду вводить в них билет с билетами. –
Привет Кит, он пахнет проблемой брандмауэра. Учитывая, что вы не можете попасть в конечную точку, все указывает на то, что он не имеет никакого отношения к самому WCF. Еще один простой тест - удалить простой текстовый файл HelloWorld или простой html-файл и посмотреть, можете ли вы это сделать. – bahree