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# 中会引发错误(我不知道确切原因),这是我为使其稳定所做的工作。

  1. 我将非托管 C++ 库转换为托管 C++ 互操作库(支持 CLR 功能)。
  2. 与我在 C# 中访问它们的方式相同。

这些变化很有魅力而且非常稳定。

希望这个改进后的答案对某人有所帮助。