2010-06-08 3 views
3

Я разрабатываю веб-службу WCF с использованием .NET 3.5 с IIS7 и отлично работает на моем локальном компьютере. Я попытался опубликовать его на сервере с IIS 6, и хотя я могу просматривать WSDL в своем браузере, клиентское приложение, похоже, не правильно подключается к нему. Я запустил приложение для обнюхивания пакетов (Charles Proxy), и ответ на первое сообщение возвращается клиенту пустым (0 байтов). Каждое сообщение после первого раза истекает.Публикация WCF .NET 3.5 на IIS 6 (Windows Server 2003)

Служба WCF является частью более крупного приложения, использующего ASP.NET 3.5. Это приложение отлично работает на IIS 6, но я думаю, что это что-то особенное для WCF. Я также попытался сделать исключение в SVC-файле, чтобы убедиться, что он сделал это так далеко, и исключение никогда не было брошено, поэтому я чувствую, что это что-то более низкое, что не работает.

Любые мысли? Мне нужно установить на сервер IIS5? Если да, то как я могу просматривать WSDL в своем браузере?

Услуга потребляется через файл SVC с помощью BasicHttpBinding

Вот мясо Web.Config (дайте мне знать, если вам нужна любая другая часть):

<system.net> 
    <defaultProxy> 
    <proxy usesystemdefault="False" proxyaddress="http://127.0.0.1:80" bypassonlocal="True"/> 
    </defaultProxy> 
</system.net> 

.. .

<system.serviceModel> 
    <services> 
    <service name="Nexternal.Service.XMLTools.VNService" behaviorConfiguration="VNServiceBehavior"> 
     <!--The first endpoint would be picked up from the confirg 
     this shows how the config can be overriden with the service host--> 
     <endpoint address="" binding="basicHttpBinding" contract="Nexternal.Service.XMLTools.IVNService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" name="mexHttpBinding" /> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="VNServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

ответ

2

Я принимаю услуги WCF в IIS 5.1 и 6 все время. В этом нет ничего особенного, кроме того, что на сервере установлен .Net 3.0+, который, как я вижу, основан на вышеприведенном комментарии ASP.NET 3.5.

У вас есть служба в файле .svc? Если бы вы могли предоставить дополнительную информацию, я уверен, что эта проблема может быть быстро решена. Как вы размещаете службу WCF? Как выглядит ваша конечная точка/поведение в вашем файле конфигурации? Какой тип привязки вы используете? Помните, что вы можете размещать HTTP-привязки только в IIS 6 и ниже. Использование IIS 7 позволяет использовать WAS, которые позволяют использовать привязки не-http для ваших услуг.

Учитывая, что вы можете видеть свой wsdl, я бы сказал, что ваша конечная точка MEX работает, но ваша другая конечная точка - нет.

+0

Я отредактировал мой вопрос, чтобы добавить фрагменты из web.config. Кроме того, мой коллега упомянул, что IIS на сервере, который я публиковал, был обновлен до IIS6, поэтому я ошибся, когда сказал IIS 5.1. Не уверен, что это помогает. Я также использую страницу SVC, чтобы выставить службу, используя basicHttpBinding. Спасибо за помощь! – Adam

+0

Быстрый тест. Вам не нужна конечная точка Mex, если вы подвергаете привязку http с помощью httpGetEnabled = true. Удалите конечную точку Mex и посмотрите, можете ли вы все-таки попасть в WSDL. Кроме того, удалите строку aspNetCompatibilityEnabled = true, если вы не требуете aspCompatibilty в сервисе. Для чего вы используете прокси-сервер localhost, и что произойдет, если вы удалите его из конфигурации? – CkH

+0

Yup, я просто загрузил его без конечной точки mex и WSDL подходит нормально. – Adam

0

WCF в значительной степени зависит от Windows, службы активации, и я помню это время сложно (лучше сказать, довольно болезненный), чтобы получить его и работает в IIS6, поэтому мы в конце концов м до IIS7.

+0

. Можно ли разместить WCF в IIS 5 или потребовать обновления до IIS 7? – Adam

+1

WCF не полагается на WAS вообще, это просто плюс. WAS позволяет размещать не-http WCF-сервисы в IIS 7 вместо того, чтобы размещать службу TCP, например, в качестве службы Windows с использованием ServiceHost. – CkH

+0

И большинство моих услуг в конечном итоге являются net.tcp ... и теперь я помню. – thaBadDawg

2

Решение может быть очень простым в трудной ситуации. Я использую .NET 4.0 и сначала казалось невозможным использовать IIS 6 и Windows Server 2003. После некоторого копания, я сделал следующее и получил это работает:

  1. Добавить SVC-отображение exntension в диспетчере IIS , Щелкните правой кнопкой мыши сайт, вкладку домашней директории, нажмите кнопку конфигурации и добавьте C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll в расширение svc.
  2. Отключить обновления KB976769v2 и KB980773 с Windows Server 2003.
  3. Удалить целевое изображение = "4.0" из вашего файла web.Config.
  4. Добавить serviceHostingEnvironment multipleSiteBindingsEnabled = "true" в system.ServiceModel сразу после тега system.ServiceModel.
  5. Щелкните правой кнопкой мыши мой виртуальный каталог, выберите вкладку ASP.Net и выберите 4.0.30319 или что-то применимое в соответствующем случае.

Возможно, вам, возможно, предоставят права доступа к NT AUTHORITY/NETWORK SERVICE для доступа к вашим базам данных, если они указаны в строке строки подключения вашего файла конфигурации.

+0

# 1 спас меня! Благодаря! – guanome

Смежные вопросы