500 Ошибка сервера при размещении WCF - PullRequest
1 голос
/ 30 марта 2012

Может быть, вы можете мне помочь, потому что я действительно в растерянности.

Я пытаюсь разместить службу WCF в IIS на поддомене.

Для начала, вот моя файловая структура:

http://s18.postimage.org/eqmjxb00n/Serv.jpg

Внутри корзины находится мой .dll, представляющий мой интерфейс и его реализацию.

Вот файл web.config:

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>    
    <system.serviceModel>
        <services>
            <service name="AuthenticatorService.Authenticator">
                <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
                    name="AuthEndpoint" contract="AuthInterface.IAuthenticator" />
                <endpoint address="" binding="mexHttpBinding" name="MetadataEndpoint"
                    contract="IMetadataExchange" />
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior>
                    <serviceMetadata httpGetEnabled="True"/>
                    <serviceDebug includeExceptionDetailInFaults="False" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

Он работает локально, но когда я загружаю в IIS, он просто выдает 500 ошибок сервера.

Спасибо!

Если это нужно, вот сообщение с подробной страницы ошибки:

Module  ServiceModel-4.0
Notification    AuthenticateRequest
Handler svc-Integrated-4.0
Error Code  0x00000000
Requested URL   http://service.swiftposter.com:80/auth.svc
Logon Method    Anonymous
Logon User  Anonymous

Редактировать: я включил ведение журнала ELMAH и наконец получил значимое сообщение:

System.ArgumentException: This collection already contains an address with scheme http. There can be at most one address per scheme in this collection. If your service is being hosted in IIS you can fix the problem by setting 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' to true or specifying 'system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'. Parameter name: item

Я собираюсь начать исследовать эту ошибку, но я написал здесь на всякий случай, если кто-то знает, что не так.

Трассировка стека:

System.ServiceModel.ServiceActivationException: The service '/auth.svc' cannot be activated due to an exception during compilation.  The exception message is: This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection. If your service is being hosted in IIS you can fix the problem by setting 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' to true or specifying 'system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'.
Parameter name: item. ---> System.ArgumentException: This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection. If your service is being hosted in IIS you can fix the problem by setting 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' to true or specifying 'system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'.
Parameter name: item
   at System.ServiceModel.UriSchemeKeyedCollection.InsertItem(Int32 index, Uri item)
   at System.Collections.Generic.SynchronizedCollection`1.Add(T item)
   at System.ServiceModel.UriSchemeKeyedCollection..ctor(Uri[] addresses)
   at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)
   at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses)
   at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)
   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
   --- End of inner exception stack trace ---
   at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
   at System.ServiceModel.Activation.ServiceHttpModule.EndProcessRequest(IAsyncResult ar)
   at System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar)

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

Я исправил ошибку, добавив ее в свой файл web.config.

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

Я думаю, это произошло потому, что у меня было 2 привязки, которые использовали http.Может быть, кто-то еще может уточнить.

0 голосов
/ 30 марта 2012

Ваш адрес службы и метаданные службы адрес не должен совпадать.Это должно быть как:

<system.serviceModel>
 <services>
   <service name="AuthenticatorService.Authenticator">
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
                name="AuthEndpoint" contract="AuthInterface.IAuthenticator" />
       <endpoint address="mex" binding="mexHttpBinding" name="MetadataEndpoint"
                contract="IMetadataExchange" />
   </service>
  </services>
  ...
</system.serviceModel>

http://msdn.microsoft.com/en-us/library/ms733766.aspx

0 голосов
/ 30 марта 2012

Ошибка 500 определяет любые виды ошибок сервера ... попробуйте получить доступ к службе с локального хоста (настройки по умолчанию для IIS показывает ошибки только локально).

Попробуйте также отредактировать настройки IIS для «Отправить ошибки в браузер»или В Диспетчере информационных служб Интернета (IIS)> Ваш Интернет> Страницы ошибок> Свойства и выберите Сведения об ошибках

Таким образом вы можете увидеть реальную ошибку, выданную вашей службой.

Проверьте такжечто в вашем пуле приложений выбрана правильная версия фреймворка

...