2009-08-16 60 views
1

Я использую VSTS2008 + C# + .Net 3.5 для разработки службы WCF, размещенной в IIS 7.0/6.0. Я учусь по следующей ссылке MSDN,Проблема хостинга WCF IIS

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

Мой вопрос, предположим, что я реализую службы WCF внутри библиотеки классов и скомпилированы в какой-то конкретной DLL сборки. В файле svc службы, кажется, нет способа указать сборку, в примере MSDN указано только полное имя класса (включая пространство имен). Итак, как среда выполнения WCF обнаружила сборку, которая содержит фактическую реализацию сборки DLL на стороне сервера? Даже если я поместил сборку в подпапку bin виртуального каталога, и если в подкаталоге bin есть много DLL, как среда выполнения WCF знает, какая DLL содержит фактическую реализацию для конкретной службы WCF?

ответ

2

Marc прав относительно размещения имени сборки после пространства имен с запятой, чтобы отделить его: я могу подтвердить, что он работал для моей собственной службы WCF, когда я это сделал. Расширение «dll» не требуется.

Так звучит, как и ваша ошибка 404.3 происходит из-за чего-то другого. Я уверен, что раньше у меня был этот, хотя я не могу воспроизвести его, когда я пытаюсь сейчас. Но у меня есть ощущение, что это связано с разрешениями на папку в IIS - возможно, проверьте, не приведет ли проблема к расширению разрешений. Я думаю, что соответствующие пользователи будут IIS_IUSRS на вашей собственной машине, а может быть, и другие процессы, такие как NETWORK SERVICE (хотя я мог ошибаться в этом).

Другая вещь, которая приходит на ум, - это шифрование; Я обнаружил, что когда мои веб-папки были зашифрованы (со стандартным шифрованием Vista), они не могли быть правильно обработаны IIS и выдавали бы такие ошибки. Поэтому, если у вас есть шифрование этих файлов/папок, попробуйте отключить его.

+0

Любые описания о том, почему проблема с разрешением приведет к этой ошибке? – George2

+0

Я тестировал при использовании пользователя группы администратора, отличного от IIS_IUSRS, поскольку учетная запись анонимной аутентификации Windows будет работать. Я не знаю, почему это вопрос разрешения, любые идеи почему? – George2

+0

Я провел дополнительное тестирование и обнаружил, что если я установил учетную запись пула приложений, это не сработает. Я должен установить соответствующую учетную запись Windows для анонимной проверки подлинности. В чем разница между учетной записью Windows, связанной с анонимной аутентификацией и учетной записью пула приложений? – George2

1

(не работает - Я оставил это здесь просто для наглядности, так другой чтобы пользователи могли видеть то, что не работает)

Я должен проверить, но я абсолютно уверен, что следует обычный шаблон - так что вы могли бы также написать "Some.Namespace.Service, Some.Assembly.dll" (или если это не удается, попробуйте его с .dll с конца).

Я, кажется, помню, что здесь есть одно незначительное изменение ... обычно среда выполнения будет уважать [assembly:TypeForwardedTo(...)], но я не думаю, что WCF обрабатывает это, но в противном случае строки стандартного типа/dll должны работать.

+0

Марк, я нахожу, что добавление имени dll не работает. Вот мой файл service.svc, <% @ ServiceHost Language = "C#" Service = "Foo.WCF.StudentManagement, WCFDemoClassv1.dll"%>, и я поместил WCFDemoClassv1.dll в подкаталог bin в веб-сайте. Я не использовал TypeForwardedTo. Какие-нибудь идеи, что не так? – George2

+1

Попробуйте: «Foo.WCF.StudentManagement, WCFDemoClassv1» –

+0

Все еще не работает, я нашел дополнительную информацию. Когда вы просматриваете в IIS 7.0 для просмотра файла service.svc в браузере, появляется сообщение об ошибке: HTTP Error 404.3 - Not Found Страница, которую вы запрашиваете, не может быть подана из-за конфигурации расширения. Если страница является скриптом, добавьте обработчик. Если файл должен быть загружен, добавьте MIME-карту. – George2

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