小编Ale*_*tim的帖子

如何找出ServiceHost Faulted事件的原因

我有一个继承自ServiceBase 的MyServiceBase类.在MyService中我已经为我的WCF服务获得了一个ServiceHost,它只有一个IsOneWay = true属性的方法.我用这段代码初始化它:

host = new ServiceHost(typeof(MyService));
host.Opened += new EventHandler(host_Opened);
host.Closed += new EventHandler(host_Closed);
host.Faulted += new EventHandler(host_Faulted);
host.UnknownMessageReceived += new EventHandler<UnknownMessageReceivedEventArgs>(host_UnknownMessageReceived);
host.Open();
Run Code Online (Sandbox Code Playgroud)

有时主机会引发Faulted事件,但*host_Faulted*方法中的EventArgs总是为空,所以我找不到它的原因.请帮忙.谢谢你.

c# wcf windows-services servicehost

8
推荐指数
1
解决办法
1万
查看次数

使用Regex在字符串中查找包含多个换行符的子字符串

我需要对这个字符串使用正则表达式:


为 "\ r\N + CMGL:0,\" REC READ \",\ "+ 79119968091 \" ,,\"一十分之十三/ 28,15:22:36 + 16 \"\r \n10160008\r \n $ GPMC,081915,A,5614.6801,N,04359.0266,E,0.0,190.2,121109 ,,*19\r\N + CMGL:1,\ "REC READ \",\ "+ 79119968091 \" ,, \"一十分之十三/ 28,15:34:26 + 16 \"\ r\N#ALARM\r \n10160008\r \n $的GPMC,081915,A,5614.6801,N,04359.0266,E,0.0,190.2,121109 ,,*19\r \n\r\NOK\r \n"


我需要从上面的字符串中获取2个子字符串(每个子字符串以\ r \n + CMGL开头,并以\ r \n结尾):

  1. \ r\N + CMGL:0,\ "REC READ \",\ "+ 79119968091 \" ,,\"一十分之十三/ 28,15:22:36 + 16 \"\r \n10160008\r \n $的GPMC,081915,A,5614.6801,N,04359.0266,E,0.0,190.2,121109 ,,*19\r \n
  2. \ r \n + CMGL:1,\"REC READ …

c# regex

5
推荐指数
1
解决办法
273
查看次数

将字符串从非托管代码传递到托管

我将字符串从非托管代码传递给托管有问题.在我的非托管类(unmanagedClass.cpp)中,我有一个指向托管代码函数的指针:

TESTCALLBACK_FUNCTION testCbFunc;
Run Code Online (Sandbox Code Playgroud)

TESTCALLBACK_FUNCTION接受一个字符串并且不返回任何内容:

typedef void (*TESTCALLBACK_FUNCTION )(char* msg);
Run Code Online (Sandbox Code Playgroud)

非托管类继承自ITest接口,该接口只有一个方法:

    STDMETHOD(put_TestCallBack) (THIS_
                  LPVOID FnAddress       
             ) PURE;
Run Code Online (Sandbox Code Playgroud)

在managedClass.cs中,我编写了这段代码:

public class ManagedClass
{
    ITest unmanaged = new unmanagedClass();
    public delegate void TestDelegate(string info);
    ManagedClass()
    {
        unmanaged.put_TestCallBack(new TestDelegate(this.Test));
    }
    void Test(string info)
    {
            MessageBox.Show(info);
    }
}

[ComImport, Guid("<my guid here>")]
public class unmanagedClass
{
}

[ComImport, System.Security.SuppressUnmanagedCodeSecurity,
Guid("<my guid here>"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITest
{
    [PreserveSig]
    int put_TestCallBack([MarshalAs(UnmanagedType.FunctionPtr), In] Capture.TestDelegate func);
Run Code Online (Sandbox Code Playgroud)

}

要从非托管代码调用Test func,我使用它

(*testCbFunc)("Func Uragan33::Execute has been started!");
Run Code Online (Sandbox Code Playgroud)

但是当调用来自managedClass.cs的Test方法时,我总是收到空 …

c# unmanaged managed com-interop marshalling

4
推荐指数
1
解决办法
1493
查看次数