Веб-сервис больше не работает для модульного тестирования / создания прокси клиента - PullRequest
2 голосов
/ 05 декабря 2011

Я добавил следующую конфигурацию службы, чтобы разрешить вызов моего метода через Ajax.

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="webHttpBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
            <behavior name="ServiceBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <webHttpBinding>
            <binding name="webHttpXDomain" crossDomainScriptAccessEnabled="true" />
        </webHttpBinding>
    </bindings>
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="My.Service.AccountService">
            <endpoint address="" behaviorConfiguration="webHttpBehavior"
                binding="webHttpBinding" bindingConfiguration="webHttpXDomain"
                name="Scripting" contract="My.Service.ServiceContracts.IAccountService" />
        </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Но теперь, когда я пытаюсь использовать WCF Test Client или запускать свои модульные тесты, он говорит, что конечная точка не прослушивает или не приходитни с чем.Клиент Ajax работает нормально.

Ответы [ 4 ]

2 голосов
/ 09 декабря 2011

Во-первых, REST не предоставляет метаданных. Так что я не думаю, что вы можете звонить так.

Во-вторых, для модульного тестирования действительно нужно звонить как клиентские звонки?Почему вы не можете попробовать протестировать серверную часть в одиночку, создав проект модульного тестирования?

Мы находимся в том же сценарии, что и наш проект, использующий клиент Azure и Mobile, и успешно проводим модульное тестирование с проектом VS test.

Для нагрузочного тестирования да .. нам нужно смоделировать вызов от клиентов.

1 голос
/ 08 декабря 2011

Проблема здесь в том, что webHttpBinding не является привязкой SOAP.Он действительно предназначен для служб REST, и для webHttpBinding нет способа выставлять метаданные по умолчанию (это объясняет проблемы тестового клиента WCF).

Здесь вы можете найти более полный ответ, касающийся webHttpBindings: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/deabd25b-a219-4e95-9826-d40dc2f75543

Что касается модульного тестирования (хотя для меня это больше похоже на интеграционный тест), вам нужна специальная настройкадля ваших методов испытаний:

[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("%PathToWebRoot%\\VSProjects", "/VSProjects")]
[UrlToTest("http://localhost/VSProjects")]
public void MethodToTest()
{
}

Подробнее: http://msdn.microsoft.com/en-us/library/ms243399.aspx

0 голосов
/ 13 декабря 2011

Я добавил дополнительную конечную точку для публикации метаданных мыла, необходимых для тестового клиента WCF и модульных тестов.

Настройка и аналогичный вопрос описаны в Конечные точки REST / SOAP для WCFобслуживание

0 голосов
/ 08 декабря 2011

См. Ссылку для настройки теста .Особенно последний пункт в статье.

Get this wrong and you will get the following error:

System.InvalidOperationException : Service ‘Test.SomeDir.FooService’ has zero application (non-infrastructure) endpoints.

2. Note the end point address ‘abc’.

1
<endpoint address="abc"
This need to map to the path the immediately follows the base host address in your URL;

http://localhost:1980/abc

Hope this helps. I find writing a test like this useful for testing my end points and making sure I’ve got everything setup.
...