Режим аутентификации = «Формы», вызывающие перенаправление в службе WCF - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть конечная точка WCF внутри моего проекта веб-приложения .NET 4.0. С помощью тестового клиента VS2010 WCF я могу правильно подключиться к услуге. Однако, когда я обращаюсь к сервису, я получаю общее сообщение об ошибке:

Тип содержимого text / html; charset = UTF-8 ответного сообщения не соответствует типу содержимого привязки (text / xml; charset = utf-8). При использовании пользовательского кодировщика убедитесь, что метод IsContentTypeSupported реализован правильно. Первые 1024 байта ответа были:

Когда я посмотрел запросы на IIS Express, я получил следующее:

Запрос запущен: POST http://machinename:port/Services/Services.svc

Запрос запущен: GET http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1

Запрос запущен: GET http://machinename:port/(X(1)A(LKwosYYszAEkAAAAMDE2YzlmNWItNTZIOS00ZDY1LTgzOTAtNDIxNDgyOWZIYWViJ86TX46muUQoL_psmkZK2rgWbO41))/Services/Services.svc?AspxAutoDectectCookieSupport=1

Запрос завершен: "http://machinename:port/Services/Services.svc" с HTTP-статусом 302.0

Запрос завершен: "http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1" с HTTP-статусом 302.0

Запрос завершен: "http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1" с HTTP-статусом 200.0

Похоже, что после отправки сообщения в службу он перенаправляется на стандартную веб-страницу службы. Еще когда убираю:

<authentication mode="Forms">
<forms cookieless="AutoDetect" loginUrl="~/Security/LoginClient.aspx" name="FORMAUTH" />

из web.config это работает. Есть идеи, что происходит? Я попытался удалить папку, в которой находится служба, из проверки подлинности (/8150047/rezhim-autentifikatsii-formy-vyzyvayschie-oshibki-v-konechnoi-tochke-wcf), но проблема все еще остается.

Хотя это работает с использованием Visual Studio Development Server (Cassini), когда я запускаю его через IIS Express 7.5, такая же ошибка возникает с аутентификацией или без нее.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Вы должны предоставить авторизацию анонимного обращения к вашим веб-службам в вашем web.config:

<location path="MyWebServices">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

Это предполагает, что вы храните все свои службы в папке с именем MyWebServices относительнокорень приложения.Вы должны разрешить * или это заставит логин для доступа.

0 голосов
/ 06 июня 2011

У меня такая же проблема, как только я использую имя машины вместо localhost в служебном адресе.Я пытался использовать «baseAddressPrefixFilters», но безуспешно.

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://XLSiteSampleD.aginsurance.intranet/PIXLSiteSample" />
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

Я думал, что можно было бы включить aspNetCompatibility в web.config со связанным атрибутом на службе: [AspNetCompatibilityRequirements (RequirementsMode)= AspNetCompatibilityRequirementsMode.Allowed)] Но это тоже не хитрость: (

Он работает только с адресом, таким как http://localhost/VirtualSite/MyService.svc без домена и без baseAddressPrefixFilters!

V.

...