常见 WCF 异常:连接意外关闭

2024-06-19

我有三个项目。一种是 WCF 服务项目,一种是 WPF 项目,一种是 Microsoft 单元测试项目。我使用如下所示的数据对象设置 WCF 服务项目:

[DataContract]
public enum Priority
{
    Low,
    Medium,
    High
}

[DataContract]
public struct TimeInfo
{
    [DataMember]
    public Int16 EstimatedHours { get; set; }

    [DataMember]
    public Int16 ActualHours { get; set; }

    [DataMember]
    public DateTime StartDate { get; set; }

    [DataMember]
    public DateTime EndDate { get; set; }

    [DataMember]
    public DateTime CompletionDate { get; set; }
}

[DataContract]
public class Task
{
    [DataMember]
    public string Title { get; set; }

    [DataMember]
    public string Description { get; set; }

    [DataMember]
    public Priority Priority { get; set; }

    [DataMember]
    public TimeInfo TimeInformation { get; set; }

    [DataMember]
    public Decimal Cost { get; set; }
}

我的合同是这样的:

[ServiceContract]
public interface ITaskManagement
{
    [OperationContract]
    List<Task> GetTasks();

    [OperationContract]
    void CreateTask(Task taskToCreate);

    [OperationContract]
    void UpdateTask(Task taskToCreate);

    [OperationContract]
    void DeleteTask(Task taskToDelete);
}

当我尝试使用以下代码在 WPF 应用程序或单元测试项目中使用该服务时:

var client = new TaskManagementClient();

textBox1.Text = client.GetTasks().ToString();

client.Close();

我收到以下错误:“基础连接已关闭:连接意外关闭。”

WPF 和单元测试项目的 app.config 如下所示:

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="WSHttpBinding_ITaskManagement" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies="false">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00"
                    enabled="false" />
                <security mode="Message">
                    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="Windows" negotiateServiceCredential="true"
                        algorithmSuite="Default" establishSecurityContext="true" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:9999/TaskManagement.svc"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITaskManagement"
            contract="TaskManagement.ITaskManagement" name="WSHttpBinding_ITaskManagement">
            <identity>
                <dns value="localhost" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>

WCF 服务的 web.config 如下所示:

    <system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="InternetBasedWcfServices.TaskManagementBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
            <behavior name="InternetBasedWcfServices.ScheduleManagementBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="InternetBasedWcfServices.TaskManagementBehavior"
            name="InternetBasedWcfServices.TaskManagement">
            <endpoint address="" binding="wsHttpBinding" contract="InternetBasedWcfServices.ITaskManagement">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
        <service behaviorConfiguration="InternetBasedWcfServices.ScheduleManagementBehavior"
            name="InternetBasedWcfServices.ScheduleManagement">
            <endpoint address="" binding="wsHttpBinding" contract="InternetBasedWcfServices.IScheduleManagement">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

这已经不是第一次发生这种情况了,我猜测这是一个配置问题。但每次我通常都会取消我的服务并将其放回去或创建一个新的服务项目。然后一切都会顺利进行。如果有人有任何想法,那就太棒了。谢谢。

**

更新:我添加了更多评论 我对这个问题的故障排除。 当有答案时,如果 答案未发布,我将其添加为 官方的“答复”。

**


我找到了答案

好吧,不确定这是否是在回答我自己的问题,但我们开始吧。由于某种原因,需要使用 [EnumMember] 属性来标记枚举,如下所示:

[DataContract]
public enum Priority
{
    [EnumMember]
    Low,
    [EnumMember]
    Medium,
    [EnumMember]
    High
}

一旦我这样做了,我的测试和服务就可以被调用而不会发生错误。我仍然不确定为什么会显示该特定错误。该错误似乎与发生错误的功能原因没有任何关联,但此修复确实使一切变得顺利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见 WCF 异常:连接意外关闭 的相关文章

  • 具有订阅者缓存的 WCF Pub/Sub

    Problem 如何使用 WCF 提供分布式 可扩展且具有抗灾能力的发布 订阅服务 Details 请注意 除了 Tibco EMS 等消息传递 中间件解决方案之外 我们还在考虑这种方法 我一直在研究 WCF 特别是如何使用它来提供发布 订
  • 有没有比 ` except: pass` 更简洁的替代方案?

    我有一个函数 可以按偏好顺序返回多个组的随机成员 事情是这样的 def get random foo or bar I d rather have a foo than a bar if there are foos return get
  • Eiffel 中的错误处理示例

    我在 Eiffel 中找不到任何实际的错误处理示例 我只找到一些例子 要么是微不足道的 要么完全忽略错误 要么将错误处理留给读者 我有兴趣了解在没有异常的情况下错误如何通过调用堆栈 例如 我想知道发送网络请求的应用程序如何通知用户在调用链中
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 数据协定中的 IsReference 属性

    目的是什么IsReference财产在DataContract 应用此属性后 请求和响应有何变化 它决定对象如何序列化 默认情况下 IsReference false Setting IsReference true允许对可以互相引用的对象
  • 检查 WebRTC 连接 - 可靠的方法

    我有一个实时视频聊天应用程序 并且使用支持 STUN TURN 和 UPD TCP 传输的 TURN 服务器 有时用户可以连接到网络blocksWebRTC 连接的端口和协议就这么多不可能发生 通常这些是公司网络 我想在用户尝试相互连接之前
  • C#:编译表达式时已添加具有相同键的项目

    好吧 这是一个棘手的问题 希望这里有一位表达大师能够发现我在这里做错了什么 因为我只是不明白 我正在构建用于过滤查询的表达式 为了简化这个过程 我有几个Expression
  • 强制 WCF 在进入实际函数之前对每个请求调用一个方法

    我有一个具有许多不同功能的 RESTful WCF 服务 对于每个函数 我需要调用我编写的身份验证方法 我可以在每个请求上手动调用此方法 但我一直在寻找一种方法来强制 WCF 引擎在输入这些函数之前调用此方法 有谁知道这是否可能 Cheer
  • 为什么“扔”和“扔前”在这种情况下有相同的行为?

    我惊呆了 我一直以为throw单独在 catch 块中会抛出手头的异常而不改变堆栈跟踪 但是throw ex在 catch 块中将更改堆栈跟踪以显示源自语句位置的异常 采取以下两个代码块 我希望输出会略有不同 因为使用throw和其他用途t
  • 我们可以将工作流服务托管为 Windows 服务吗?

    我正在开发一个日志记录应用程序 它要求我有一个作为服务公开的工作流 工作流服务 我们希望将其托管为 Windows 服务 不希望将工作流服务托管为 IIS 中的 svc 文件 将其作为 Windows 服务的另一个原因是能够通过命名管道与服
  • (MSTest) 扩展 ExpectedExceptionBaseAttribute 隐藏测试失败解释

    运行此测试时 TestMethod ExpectedException typeof SpecialException public void Test1 throw new NotImplementedException Visual S
  • typeinfo、共享库和 dlopen()(不带 RTLD_GLOBAL)

    当使用加载时 我在跨共享库时遇到了一些异常无法正常运行的问题 或者至少 正如我所希望的 我知道这存在问题 dlopen 我在这里包含一些简化的示例代码 实际情况是myapp Matlab myext1 mexglx matlab 扩展 my
  • 如何在 Xamarin.Forms 项目中使用 .netstandard 中的 WCF 服务?

    我创建了一个 Xamarin Forms 项目 其中 netstandard 2 0 作为 PCL 项目 我正在尝试在该项目中使用 WCF 服务 我已经为 WCF 服务添加了连接服务 当我尝试调用服务中提供的任何方法时 它会给出如下错误 S
  • Ruby 中救援的替代方案?

    好像我有begin rescue end我的代码中到处都是语句 这似乎不是正确的做法 谁能建议我如何捕获任何异常而不必将所有内容都放在里面begin rescue end 有什么方法可以让 Ruby 闭嘴并继续前进 即使出现异常也是如此 与
  • 如何在 Python 中打印异常?

    如何打印错误 异常except block try except print exception 对于 Python 2 6 及更高版本和 Python 3 x except Exception as e print e 对于 Python
  • java应用程序中与oracle的连接

    我已经下载了 oracle express 11g 版本并安装了它 现在我想从 java 应用程序连接它 这是我的连接代码 Class forName oracle jdbc driver OracleDriver newInstance
  • 具有 ISO 日期格式的 WCF REST JSON

    我在 WCF Web 服务 框架 4 0 中使用 JSON 支持 ISO 日期格式时遇到了一个大问题 我尝试了很多 但还没有运气 休息服务 WebInvoke Method PUT UriTemplate mvnoid OrderID Re
  • 网络关闭时在网络文件夹上使用 Directory.Exists

    我公司的代码库包含以下 C 行 bool pathExists Directory Exists path 在运行时 字符串path恰好是公司内联网上文件夹的地址 类似 company companyFolder 当我的 Windows 计
  • iOS 64 位 @try {... } @catch {...} 不起作用

    我有一个非常特殊的问题 最近 我向我的 iOS 项目 arm64 添加了 64 位支持 从那时起 我开始收到内部代码段未捕获的异常 try catch 我使用 Crashlytics 进行崩溃报告 我设法在应用程序中的任何位置使用以下代码行
  • 从 WCF 发送的响应中删除 utf-8 标识符 (BOM)

    我正在用 c 创建 facebook Rest API 的克隆 我正在使用 facebook PHP sdk 对其进行测试 我遇到的问题是我的网络 Rest 服务发送的响应前面包含 utf 8 Bom 并且 Facebook SDK 无法正

随机推荐