【问题标题】:Trying to convert this VB.Net ThreadStart WCF code to C#试图将此 VB.Net ThreadStart WCF 代码转换为 C#
【发布时间】:2017-12-09 05:29:55
【问题描述】:

我在 VB.Net 中有以下代码。它可以根据需要编译和工作。

在我努力转向 C# 的过程中,每当我从事一个新项目时,我都会努力使用 C#,但是在这种情况下,我显然遗漏了一些东西。

Private m_Service As ServiceHost = Nothing

Public Function Start(ByVal AddressToConnect As String) As Thread
    Dim ServerProcess As New Thread(AddressOf WebService)

    ServerProcess.Start(AddressToConnect)

    Return ServerProcess
End Function

Private Sub WebService(ByVal AddressToListen As String) ' Address should be in the form: "http://localhost:8000/IHello"
    ' Define where to listen
    Dim Address As Uri = New Uri(AddressToListen)
    ' Define how to exchange messages
    Dim Binding As BasicHttpBinding = New BasicHttpBinding()

    ' When the connection is established, define what object is created
    m_Service = New ServiceHost(GetType(Worker), Address)

    ' Add an endpoint, passing the address, binding and contract
    m_Service.AddServiceEndpoint(GetType([Interface].IContract), Binding, Address)

    ' YOU MUST PERFORM THE FOLLOWING BEFORE YOU ATTEMPT TO OPEN THE CONNECTION
    ' netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

    ' Begin listening for connections
    m_Service.Open()
    Console.WriteLine("WCF Service started")
End Sub

Public Sub [Stop]()
    m_Service.Close()
    m_Service = Nothing
End Sub

从这些 VB 到 C# 转换站点之一的 C# 中的相同内容表明以下内容应该有效:

private ServiceHost _Service = null;

public Thread Start(string AddressToConnect)
{

    Thread ServerProcess = new Thread(new EventHandler(WebService));
    ServerProcess.Start(AddressToConnect);
    return ServerProcess;
}


private void WebService(string AddressToListen)
{
    //  Address should be in the form: "http://localhost:8000/IHello"
    //  Define where to listen
    Uri Address = new Uri(AddressToListen);
    //  Define how to exchange messages

    BasicHttpBinding Binding = new BasicHttpBinding();

    //  When the connection is established, define what object is created
    _Service = new ServiceHost(typeof(Worker), Address);

    //  Add an endpoint, passing the address, binding and contract
    _Service.AddServiceEndpoint(typeof(Interface.IContract), Binding, Address);

    //  YOU MUST PERFORM THE FOLLOWING BEFORE YOU ATTEMPT TO OPEN THE CONNECTION
    //  netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

    //  Begin listening for connections
    _Service.Open();
    Console.WriteLine("WCF Service started");
}

public void Stop()
{
    _Service.Close();
    _Service = null;
}

问题是编译器抱怨: Thread ServerProcess = new Thread(new EventHandler(WebService));

“WebService 没有重载匹配委托 EventHandler”

我做错了什么? C# 代码应该是什么?

抱歉,这应该是一个简单的问题,但我一直在与代表作斗争。

--编辑--

感谢 Markus,这就是我现在所拥有的:

public Thread Start(string AddressToConnect)
    {
        Thread ServerProcess = new Thread(WebService);

        ServerProcess.Start(AddressToConnect);

        return ServerProcess;
    }

WebService 方法现在是:

private void WebService(object AddressToListen)
    {
        //  Address should be in the form: "http://localhost:8000/IHello"
        //  Define where to listen
        Uri Address = new Uri((string)AddressToListen);
        //  Define how to exchange messages
...

【问题讨论】:

  • 这是等价的吗?公共任务开始(字符串地址连接){任务t =新任务(()=>{Web服务(地址连接);}); t.Start();返回 t; }
  • new Thread(WebService(AddressToConnect)); 试试那个...然后启动它ServerProcess.Start();...
  • @Codexer: 我试过 Thread t = new Thread(WebServiceAddressToConnect));t.Start();return t;这不会编译
  • 我的 typeo new Thread(WebService); 然后 ServerProcess.Start(AddressToConnect);... 另外,您发布的代码不是我发布的...

标签: c# .net vb.net wcf


【解决方案1】:

您可以删除AddressOf 运算符。在 C# 中不需要:

Thread ServerProcess = new Thread(WebService);

需要注意的一点是,提供的方法需要与ParameterizedThreadStart 的签名相匹配。这需要一个对象作为参数,因此您需要更改 WebService 方法的签名:

private void WebService(object AddressToListen)

在方法中,您必须将对象转换为字符串。

【讨论】:

  • 我添加了一个新的 StartThread 方法,并按照您的建议更改了签名,它确实可以编译。我将发布我的想法,因为您确实为我提供了足够的信息来解决剩下的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多