Не удается получить доступ к службе WCF, размещенной в Apache, с помощью mod-mono

У меня есть служба WCF, использующая basicHttpBinding, размещенную в Apache 2.2.15, с использованием mod_mono в CentOS. Я добавил следующие директивы в конец /etc/httpd/conf/httpd.conf, чтобы включить службы WCF:

MonoServerPath default /usr/bin/mod-mono-server4
AddType application/x-asp-net .svc

Когда я пытаюсь вызвать операцию в службе с клиента в Windows:

        BasicHttpBinding binding = new BasicHttpBinding();

    IService1 service1 = ChannelFactory<IService1>.CreateChannel(binding, new EndpointAddress(new Uri(`"http://ipaddress/svctest/Service1.svc"`)));

    string test= service1.GetData(1);

Выдается следующее исключение:

ProtocolException не было обработано: тип содержимого application/x-asp-net ответного сообщения не соответствует типу содержимого привязки (text/xml; charset=utf-8). При использовании пользовательского кодировщика убедитесь, что метод IsContentTypeSupported реализован правильно. Первые 109 байт ответа были: '‹%@ ServiceHost Language="C#" Debug="true" Service="svcfiletest.Service1" CodeBehind="Service1.svc.cs"% >

Когда я обращаюсь к сервису через браузер, он загружает файл вместо отображения описания сервиса.

Когда я использую svcutilhttp://ipaddress/svcutil/Service1.svc?wsdl, я получаю следующее сообщение:

Документ по URL-адресу http://ipaddress/svctest/Service1.svc не был распознан как документ известного типа. Сообщение об ошибке каждого известного типа может помочь вам решить проблему: -Отчет из «Схемы XML»: «Имя не может начинаться с символа «%», шестнадцатеричное значение 0x25. Строка 1, позиция 2.'. -Отчет из «Документа WSDL»: «Ошибка в XML-документе (1,2)». -Имя не может начинаться с символа '%', шестнадцатеричное значение 0x25. Линия 1, позиция 2.

Кажется, он получает текст из Service1.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="svcfiletest.Service1" CodeBehind="Service1.svc.cs" %>

Любая помощь?

Спасибо


person Miguel Marques    schedule 21.11.2012    source источник


Ответы (1)


Вы также действительно загрузили модуль где-то в своем /etc/httpd/conf/httpd.conf ?

Вам нужны как Include /etc/apache2/mod_mono.conf (или поместите его в каталог конфигурации, который включен вашим http.conf), так и LoadModule mono_module /usr/lib/httpd/modules/mod_mono.so

См. http://www.mono-project.com/Mod_mono.

Мои настройки — запуск mod-mono вручную

Я вручную скомпилировал mod-mono, это мой mod_mono.conf: http://pastebin.com/qp8vxHQ7. Вам нужно вручную запустить mod-mono-server с этой настройкой.

Я проверил этот модуль в ~/Sites/, apache определяет его как http://localhost/~Martin/.

Затем я запустил mod-mono-server4 в каталоге ~/Sites следующим образом:

    mod-mono-server4 --port 9000 --applications /~martin/Service:Service --verbose

Это работает нормально.

Мои настройки — автоматический запуск mod-mono

Также протестирована альтернативная установка: http://pastebin.com/tYWk3tC9. Это позволяет apache запускать mod-mono.

person Martin Baulig    schedule 21.11.2012
comment
У меня есть Include conf.d/*.conf, а внутри /etc/httpd/conf.d у меня есть mod-mono.conf. Внутри mono.conf у меня есть ‹IfModule !mod_mono.c› LoadModule mono_module /usr/lib64/httpd/modules/mod_mono.so ‹/IfModule› . Мне удалось открыть тестовый проект, поставляемый с mod_mono, в моем браузере Windows с помощью mod-mono-server2. Но для службы WCF с mod-mono-server4 это не работает. - person Miguel Marques; 21.11.2012
comment
Хм, я только что попробовал, и мне пришлось добавить AddType application/x-asp-net .svc к mod-mono.conf. - person Martin Baulig; 21.11.2012