2015-10-05 3 views
0

У меня есть служба WCF на фреймворке 4, хорошо работающая внутри внутренней сети. Внешне я вижу просмотр каталогов, потому что включен в web.config, но как только я нажимаю на файл svc, вы бросаете 404 «Ошибка сервера в '/' Application». Существует также обратный прокси-сервер DMZ, и я уверен, что это моя проблема. Я проверил журналы IIS-7, и ошибка 404 не регистрируется, только 200 OK от внутреннего доступа регистрируются. IIS имеет множество сервисов и сайтов, но это первый раз, когда моя компания пытается использовать WCF с помощью службы REST. В течение нескольких дней я искал ответы только на поиск решений, которые не работают над моим проектом. Ниже приведен файл конфигурации. Заранее благодарю за любую помощь.Служба WCF работает внутренне, но не внешне

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.net> 
<defaultProxy useDefaultCredentials="true"></defaultProxy> 
</system.net> 

<system.diagnostics> 
<sources> 
<source propagateActivity="true" name="System.ServiceModel" switchValue="Warning,ActivityTracing"> 
<listeners> 
    <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
    <filter type="" /> 
     </add> 
     <add name="ServiceModelTraceListener"> 
     <filter type="" /> 
     </add> 
    </listeners> 
    </source> 
</sources> 
<sharedListeners> 
    <add initializeData="X:\RestService\DrillSvc\web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp"> 
    <filter type="" /> 
    </add> 
</sharedListeners> 
</system.diagnostics> 
<appSettings /> 
<connectionStrings> 
<add name="cn" connectionString="Data Source =test ; initial catalog=Drillers; User Id=userid; Password=password" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
<system.web> 

<compilation debug="true" targetFramework="4.0"> 
    <assemblies> 
    <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364123" /> 
    </assemblies> 
</compilation> 
<authentication mode="Windows" /> 
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> 
    <identity impersonate="false" /> 
</system.web> 

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"> 
    <!--<remove name="webDAVModule"/>--> 
</modules> 

<directoryBrowse enabled="true" /> 
</system.webServer> 
<system.serviceModel> 
<bindings> 
    <webHttpBinding> 
    <binding name="WCFwebBinding"> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="Windows"/> 
     </security> 
    </binding> 

    </webHttpBinding> 
</bindings> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"> </serviceHostingEnvironment> 
<services> 
    <service behaviorConfiguration="DrillServiceBehavior" name="DrillService"> 
    <endpoint address="" behaviorConfiguration="WCFDrillWebBehavior" binding="webHttpBinding" contract="IDrillService"> 
     <identity> 
     <dns value="mycompany.com" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="WCFDrillWebBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    <behavior name="DrillServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
</system.serviceModel> 
</configuration>` 

Обновления: Я добавил простой HTML страницу, и она работает от внешней общественности, но файл SVC по-прежнему бросает 404 ошибки не найдена.

+0

Вы хотите сказать, что когда вы нажимаете на ссылку, чтобы просмотреть WSDL на странице справки, она бросает ошибку 404? И вы можете получить доступ к справочной странице извне? –

+0

Привет, Джеймс, когда я нажимаю, чтобы посмотреть сервис svc, и там он перечисляет wsdl, он выдает 404 извне. Внутри я могу открыть его и использовать службу. – Deleted

ответ

1

Наконец, после всех изменений я нашел проблему. В размещенном внутреннем сервере службы wcf в файле inetpub/wwwroot имеется файл конфигурации специально для сайта IIS, а не для службы web.config. После добавления этого кода сработала первая попытка. DMZ не нуждался в каких-либо изменениях. Надеюсь, это поможет другим.

<system.serviceModel> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/> 
</system.serviceModel> 
0

Трудно сказать наверняка, ничего не зная об окружающей среде, прокси-сервер, или как вы проводите тестирование сервиса, но здесь есть несколько вещей, чтобы проверить:

  • Убедитесь, что прокси-сервер правильно настроен.
  • Убедитесь, что услуга доступна с прокси-сервера.

Наконец, если вы пытаетесь просмотреть службу извне через HTTPS, вам нужно будет убедиться, что метаданные службы подвергаясь над HTTPS в конфигурации:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 

Надеется, что это помогает направьте вас в правильном направлении.

+0

Я пробовал эти настройки до и без изменений. Я думаю, что мне понадобится веб-приложение, которое находится в DMZ, которое вызывает службу, но я думаю, что моему боссу это не понравится. Помимо этого я попробую другой сервис, потому что я потерян. Это не имеет никакого смысла, работает отлично внутри, но бросает 404 извне. И все другие веб-формы, сервисы, которые не являются WCF, работают нормально и снаружи. – Deleted