WCF - использовать без app.config - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть рабочий процесс SharePoint, который вызывает службу WCF.Это работает нормально, если рабочий процесс работает под управлением IIS и не переключен на службу таймера.

Проблема в том, что служба таймера не имеет доступа к настройкам web.config, необходимым для настройки соединения WCF из контекста службы таймера.

Could not find endpoint element with name endpointname' and contract 'servicecontractname' in the ServiceModel client configuration section

Я настраиваю всю информацию, необходимую WCF для установления соединения в коде (и переопределяю значения, установленные в web.config)

Мой вопрос: могу ли я полностью обойти эту конфигурацию?Я бы предпочел не зависеть от нескольких файлов ettings и их синхронизации.

Обновление Этот небольшой кусочек кода помог.

string address = "http://myservice.com/soap.svc";
Binding binding = new System.ServiceModel.BasicHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress(address);
client = new MyServiceClient(binding, endpointAddress);

Спасибо завход!

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Конечно - вы можете сделать все настройки в коде.

Uri tcpBaseAddress = new Uri("net.tcp://localhost:8000/");

ServiceHost host = new ServiceHost(typeof(MyService),tcpBaseAddress);

Binding tcpBinding = new NetTcpBinding( );

//Use base address as address
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,"");
//Add relative address
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,"MyService");
//Ignore base address
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,
   "net.tcp://localhost:8001/MyService");

host.Open( );

http://en.csharp -online.net / WCF_Essentials% E2% 80% 94Programmatic_Endpoint_Configuration

1 голос
/ 28 февраля 2011

Вот пример, который взят прямо из нашего кода SharePoint для нашего продукта PDF Converter .Он использует HTTPBindings и полностью обходит конфигурационные файлы.

    /// <summary>
    /// Configure the Bindings, endpoints and open the service using the specified address.
    /// </summary>
    /// <returns>An instance of the Web Service.</returns>
    public static DocumentConverterServiceClient OpenService(string address)
    {
        DocumentConverterServiceClient client = null;

        try
        {
            BasicHttpBinding binding = new BasicHttpBinding();
            // ** Use standard Windows Security.
            binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
            binding.Security.Transport.ClientCredentialType = 
                                                        HttpClientCredentialType.Windows;
            // ** Increase the Timeout to deal with (very) long running requests.
            binding.SendTimeout = TimeSpan.FromMinutes(30);
            binding.ReceiveTimeout = TimeSpan.FromMinutes(30);
            // ** Set the maximum document size to 40MB
            binding.MaxReceivedMessageSize = 50*1024*1024;
            binding.ReaderQuotas.MaxArrayLength = 50 * 1024 * 1024;
            binding.ReaderQuotas.MaxStringContentLength = 50 * 1024 * 1024;

            // ** Specify an identity (any identity) in order to get it past .net3.5 sp1
            EndpointIdentity epi = EndpointIdentity.CreateUpnIdentity("unknown");
            EndpointAddress epa = new EndpointAddress(new Uri(address), epi);

            client = new DocumentConverterServiceClient(binding, epa);

            client.Open();

            return client;
        }
        catch (Exception)
        {
            CloseService(client);
            throw;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...