Получение звонящих по IP - PullRequest
1 голос
/ 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();
        }
    }
}

Ping () функция decaration

[ServiceContract(Namespace = "http://PBMB")]
public interface IService
{
    [OperationContract]
    string Ping();
}

Реализация функции Ping ()

public class PBMBService : IService
{
    SqlConnection sql = new SqlConnection(@"Data Source=.\SqlExpress;Initial Catalog=PBMB;Integrated Security=True");
    SqlCommand cmd;

    private void Message(string message)
    {
        Console.WriteLine(DateTime.Now + " -> " + message);
    }

    public string Ping()
    {
        Message("Ping()");
        return "Metoda Ping() działa.";
    }
}

Как указать IP-адрес вызывающего абонента в методе сообщения?

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Оригинальный блог доступен через Wayback Machine .Обратите внимание, что вам нужно использовать WCF 3.5 или более поздней версии для сообщения автора.

Код из статьи ниже;

Сервисный контракт

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ClientInfoSample
{

    [ServiceContract]
    public interface IService
    {

        [OperationContract]
        string GetData(string value);
    }
}

Реализацияс получением IP:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Channels;

namespace ClientInfoSample
{

    public class MyService : IService
    {

        public string GetData(string value)
        {

            OperationContext context = OperationContext.Current;
            MessageProperties messageProperties = context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;

           return string.Format("Hello {0}! Your IP address is {1} and your port is {2}", value, endpointProperty.Address, endpointProperty.Port);
        }
    }
}
0 голосов
/ 22 июня 2011

Вы ищете что-то вроде

HttpContext.Current.Request.UserHostAddress
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...