Как установить конечную точку во время выполнения - PullRequest
5 голосов
/ 22 июня 2011

У меня есть приложение на основе этого руководства

Метод, который я использую для проверки соединения с сервером (в клиентском приложении):

public class PBMBService : IService
{
    private void btnPing_Click(object sender, EventArgs e)
    {
        ServiceClient service = new ServiceClient();
        tbInfo.Text = service.Ping().Replace("\n", "\r\n");
        service.Close();
    }

//other methods
}

Основная функция службы:

class Program
{
    static void Main(string[] args)
    {
        Uri baseAddress = new Uri("http://localhost:8000/PBMB");

        ServiceHost selfHost = new ServiceHost(typeof(PBMBService), baseAddress);

        try
        {
            selfHost.AddServiceEndpoint(
                typeof(IService),
                new WSHttpBinding(),
                "PBMBService");

            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            selfHost.Description.Behaviors.Add(smb);

            selfHost.Open();
            Console.WriteLine("Serwis gotowy.");
            Console.WriteLine("Naciśnij <ENTER> aby zamknąć serwis.");
            Console.WriteLine();
            Console.ReadLine();


            selfHost.Close();
        }
        catch (CommunicationException ce)
        {
            Console.WriteLine("Nastąpił wyjątek: {0}", ce.Message);
            selfHost.Abort();
        }
    }
}

В app.config У меня есть:

    <client>
        <endpoint address="http://localhost:8000/PBMB/PBMBService" binding="wsHttpBinding"
            bindingConfiguration="WSHttpBinding_IService" contract="IService"
            name="WSHttpBinding_IService">
            <identity>
                <userPrincipalName value="PPC\Pawel" />
            </identity>
        </endpoint>
    </client>

Я могу сменить IP отсюда.Но как я могу изменить его во время выполнения (т.е. прочитать адрес / IP из файла)?

Ответы [ 2 ]

15 голосов
/ 22 июня 2011

Вы можете заменить конечную точку службы после создания класса клиента:

public class PBMBService : IService
{
    private void btnPing_Click(object sender, EventArgs e)
    {
        ServiceClient service = new ServiceClient();
        service.Endpoint.Address = new EndpointAddress("http://the.new.address/to/the/service");
        tbInfo.Text = service.Ping().Replace("\n", "\r\n");
        service.Close();
    }
}
0 голосов
/ 03 ноября 2017

Вы можете использовать следующую фабрику каналов:

using System.ServiceModel;

namespace PgAuthentication
{
    public class ServiceClientFactory<TChannel> : ChannelFactory<TChannel> where TChannel : class
    {
        public TChannel Create(string url)
        {
            return CreateChannel(new BasicHttpBinding { Security = { Mode = BasicHttpSecurityMode.None } }, new EndpointAddress(url));
        }
    }
}

, и вы можете использовать это со следующим кодом:

Console.WriteLine(
                new ServiceClientFactory<IAuthenticationChannel>()
                    .Create("http://crm.payamgostar.com/Services/IAuthentication.svc")
                        .AuthenticateUserNameAndPassWord("o", "123", "o", "123").Success);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...