You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨DLL传递Guid参数时出现截断异常的技术求助

Guid跨DLL传递异常:参数后半段被置零

将Guid从当前项目传递到另一个DLL的方法时,参数出现异常——前两个连字符前的部分保留随机值,但之后的内容全部被奇怪地置零。已停止该DLL对应的Windows Service,问题仍然存在。

  • 方法调用前的正确Guid:e808b3fa-ab7c-48fc-8224-535e41393532
  • 方法调用后的异常Guid:b287a7d0-00d5-0000-0000-000000000000(多次调试发现前半段值会变化,但后半段始终置零)

简化后的代码示例

Service.Business.Service.cs

public static class Service
{
    internal static readonly CalendarService.ClientProxy.Calendar TradingCalendar;

    static Service()
    {
        // 调试时此处TradingCalendarUid值为e808b3fa-ab7c-48fc-8224-535e41393532
        TradingCalendar = CalendarService.ClientProxy.Service.Calendars.GetCalendarByUidOrThrow(ServiceSettings.Instance.TradingCalendarUid); 
    }
    public static void Initialize()
    {
    }
}

Service.Business.ServiceSettings.cs

public class ServiceSettings : SettingsBase
{
    private static readonly ServiceSettings _Instance = new ServiceSettings();
    public static ServiceSettings Instance { get { return _Instance; } }
    public Guid TradingCalendarUid { get; private set; }
}

Calendar.CalendarService.ClientProxy.Calendars.cs

public class Calendars : ClientWrapperCacheBase<CalendarDto, Calendar, Guid>, IEnumerable<Calendar>, IEnumerable
{
    public Calendar GetCalendarByUidOrThrow(Guid calendarUid)
    {
        // 调试时此处calendarUid值为b287a7d0-00d5-0000-0000-000000000000
        Calendar calendarByUid = GetCalendarByUid(calendarUid); 
    }
}

调试用功能测试代码

[TestMethod]
public void ServiceConstructor()
{
    Service.Business.Service.Initialize();
}

补充说明

  • 代码库由他人开发,本人是新手。
  • 问题是在将所有Windows Service从本地ServiceBus升级到Azure云托管ServiceBus后出现的。
  • TradingCalendarUid对应MS SQL Server表中某行的列值,其加载逻辑如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;

// namespace name omitted

public abstract class SettingsBase
{
    private readonly bool ThrowOnMissingSettings;

    public SettingsBase(bool throwOnMissingSettings = false)
    {
        ThrowOnMissingSettings = throwOnMissingSettings;
    }

    protected abstract List<SettingData> OnLoad();

    protected void Load()
    {
        Type type = GetType();
        List<SettingData> list = OnLoad();
        if (list == null)
        {
            list = new List<SettingData>();
        }
        if (ThrowOnMissingSettings)
        {
            List<string> list2 = (from property in type.GetProperties()
                join setting in list on property.Name equals setting.Name into setting_join
                from _setting in setting_join.DefaultIfEmpty()
                where _setting == null
                select property.Name).ToList();
            if (list2.Count > 0)
            {
                throw new Exception("Missing configuration: " + string.Join(", ", list2));
            }
        }
        foreach (SettingData item in list)
        {
            PropertyInfo property2 = type.GetProperty(item.Name);
            if (property2 == null)
            {
                throw new Exception($"Invalid Setting. Name: {item.Name}");
            }
            TypeConverter converter = TypeDescriptor.GetConverter(property2.PropertyType);
            if (converter == null)
            {
                throw new Exception($"Converter not found. Type: {property2.PropertyType}");
            }
            property2.SetValue(this, converter.ConvertFromInvariantString(item.Value), null);
        }
    }
}

内容的提问来源于stack exchange,提问作者user3773048

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:13:35