Как я могу настроить веб-сервис в .NET 4 без использования app.config - PullRequest
2 голосов
/ 10 февраля 2011

У меня есть проект .NET 4, сделанный из проекта EXE и библиотеки классов.Библиотека классов содержит ссылку на веб-сервис (с использованием WCF).Все работает нормально, только если я развернул файл app.config (который содержит информацию о привязке) вместе с моим exe-файлом.Как мне все настроить с помощью кода без необходимости развертывания файла app.config (я не хочу, чтобы мои пользователи меняли эти настройки).Спасибо.Andrea

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

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

Вам просто нужно создать экземпляр правильной привязки и настроить его свойства в соответствии с требованиями к обслуживанию на другой стороне.

Например:

private IDisposableService GetClient()
{
    var netBinding = new BasicHttpBinding();
    netBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
    netBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;

    var factory = new ChannelFactory<IDisposableService>(netBinding, new EndpointAddress(new Uri(ServerUrl)));
    factory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
    factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

    var channel = factory.CreateChannel();

    return channel;
}

interface IDisposableService : IYourService, IDisposable
{
}

Тогда вы можете просто использовать:

using (var proxy = GetClient())
{
    // call proxy here
}
0 голосов
/ 10 февраля 2011

Вот как я это сделал:

MyServiceResponseClient embEvalServiceClient = new MyServiceResponseClient (new BasicHttpBinding(),
                                                    new EndpointAddress(new Uri(url)));

if (embEvalServiceClient != null)
{
    embEvalServiceClient.GetPendingEvalsCompleted += getPendingEvalsCompletedHandler;
    embEvalServiceClient.GetPendingEvalsAsync(attemptId);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...