我一直在尝试在C#客户端项目中访问WCF服务功能(也加载C ++ Dll)。
当我启动客户端程序时,它会获取服务,加载dll,但突然WCF服务将从系统托盘终止。
我在web.config(服务)和app.config(客户端)中添加了超时参数。
我试图将错误记录为here,但仍然没有记录错误。
导致此错误的原因,任何帮助将不胜感激。
更新1 这是我的trace.svclog
更新2 这是我的整个Code 这包含2个解决方案,HelloWorld是一个C ++ Dll& WcfServices包含服务器(将加载C ++ Dll)和客户端项目。这些项目根据互联网解决方案进行了所有变更。
此致 Jithendra
答案 0 :(得分:3)
将以下内容添加到您的主机Web.Config中。崩溃后打开C:\ Trace.svclog并查看红线。查看XML选项卡,您将看到有关错误的详细信息。
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name='traceListener' type='System.Diagnostics.XmlWriterTraceListener' initializeData='C:\Trace.svclog'/>
</listeners>
</source>
</sources>
</system.diagnostics>
哦,伙计,我终于开始工作了。 你应该做的是
[DllImport(@"C:\...\Helloworld.dll", CharSet = CharSet.Ansi, EntryPoint = "Encode01", ExactSpelling = false, SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.SysInt)]
public static extern IntPtr Encode01();
和
public string Genkey()
{
IntPtr ptr = Encode01();
return Marshal.PtrToStringAnsi(ptr);
}
答案 1 :(得分:1)
我的问题出现在c ++ Dll中,而不是我在WCF服务中加载的WCFService。 按照Link的解释,我正在做
这个
char* pszReturn = new char[256];
而不是
char* pszReturn = NULL;
pszReturn = (char*)::CoTaskMemAlloc(ulSize);
这导致返回值时出错,并在结果中抛出异常。
Content Type application/soap+xml; charset=utf-8 was sent to a service expectingtext/xml; charset=utf-8. The client and service bindings may be mismatched.
希望能帮助某人并特别感谢@Giorgi Nakeuri带领我这一点。
此致
Jithendra。
答案 2 :(得分:0)
我和@Giorgi Nakeuri的上述答案都是正确的,但当我将WCF服务作为独立服务安装并尝试运行客户端时,它又开始抛出相同的异常。
我使用Visual Studio 2013,在.Net 4.5中将正常的非托管c ++库加载到C#中会引发错误(我不确切知道原因),这就是我为使其稳定所做的一切。 / p>
这些变化像魅力和稳定一样。
希望这个改进的答案有助于某人。