WCF 服务关闭
WCF service shutting down
我一直在尝试访问 C# 客户端项目中的 WCF 服务函数(它也加载 C++ Dll)。
每当我启动客户端程序时,它都会获取服务、加载 dll,但 WCF 服务会突然从系统托盘中终止。
我在web.config(服务)和app.config(客户端)中添加了超时参数。
我已尝试按照 here 所述记录错误,但仍然没有记录错误。
是什么导致了这个错误,我们将不胜感激。
更新 1
这是我的 trace.svclog
更新 2
这是我的全部 Code
这包含 2 个解决方案,HelloWorld 是一个 C++ Dll 和 WcfServices 包含服务器(将加载 C++ Dll)和客户端项目。这些项目已经根据互联网解决方案进行了迄今为止的所有更改。
此致,
吉珊德拉
将以下内容添加到您的主机 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);
}
我的问题出在 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.
我和@Giorgi Nakeuri 的上述回答都是正确的,但是当我将 WCF 服务安装为独立服务并尝试 运行 客户端时,它再次开始抛出相同的异常。
我使用 Visual studio 2013,在 .Net 4.5 中将普通的非托管 C++ 库加载到 C# 中会引发错误(我不知道确切原因),这是我为使其稳定所做的工作。
- 我将非托管 C++ 库转换为托管 C++ 互操作库(支持 CLR 功能)。
- 与我在 C# 中访问它们的方式相同。
这些变化很有魅力而且非常稳定。
希望这个改进后的答案对某人有所帮助。
我一直在尝试访问 C# 客户端项目中的 WCF 服务函数(它也加载 C++ Dll)。
每当我启动客户端程序时,它都会获取服务、加载 dll,但 WCF 服务会突然从系统托盘中终止。
我在web.config(服务)和app.config(客户端)中添加了超时参数。
我已尝试按照 here 所述记录错误,但仍然没有记录错误。
是什么导致了这个错误,我们将不胜感激。
更新 1 这是我的 trace.svclog
更新 2 这是我的全部 Code 这包含 2 个解决方案,HelloWorld 是一个 C++ Dll 和 WcfServices 包含服务器(将加载 C++ Dll)和客户端项目。这些项目已经根据互联网解决方案进行了迄今为止的所有更改。
此致, 吉珊德拉
将以下内容添加到您的主机 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);
}
我的问题出在 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.
我和@Giorgi Nakeuri 的上述回答都是正确的,但是当我将 WCF 服务安装为独立服务并尝试 运行 客户端时,它再次开始抛出相同的异常。
我使用 Visual studio 2013,在 .Net 4.5 中将普通的非托管 C++ 库加载到 C# 中会引发错误(我不知道确切原因),这是我为使其稳定所做的工作。
- 我将非托管 C++ 库转换为托管 C++ 互操作库(支持 CLR 功能)。
- 与我在 C# 中访问它们的方式相同。
这些变化很有魅力而且非常稳定。
希望这个改进后的答案对某人有所帮助。