C# UTF-8编码是否必须在web服务响应中明确定义?
我支持一个基于.NET3.5的C#(.asmx)web服务。这是一个非常非常简单的服务,其中包括返回街道地址。提供该服务的应用程序的范围最近有所扩大,现在其背后的DB也拥有国际地址。这意味着可以存储拉丁外语字符(重音符号、umlauts等),并因此在web服务响应中返回 当我使用soapUI自动生成的请求在本地测试服务时,没有添加任何特殊的头或任何其他内部结构信息,我看到的这个元素与存储在数据库中的元素一模一样,带有重音标记:C# UTF-8编码是否必须在web服务响应中明确定义?,c#,web-services,utf-8,asmx,C#,Web Services,Utf 8,Asmx,我支持一个基于.NET3.5的C#(.asmx)web服务。这是一个非常非常简单的服务,其中包括返回街道地址。提供该服务的应用程序的范围最近有所扩大,现在其背后的DB也拥有国际地址。这意味着可以存储拉丁外语字符(重音符号、umlauts等),并因此在web服务响应中返回 当我使用soapUI自动生成的请求在本地测试服务时,没有添加任何特殊的头或任何其他内部结构信息,我看到的这个元素与存储在数据库中的元素一模一样,带有重音标记: <CompositeStreet>140-146 RUE
<CompositeStreet>140-146 RUE EUGÈNE DELACROIX</CompositeStreet>
以及serializable类,该类是VZBServiceResponse类型的一个属性,该属性以XML响应结束。您将看到的只是[Serializable]
属性和返回元素顺序的设置
namespace Company.IT.Network.LocationStore.LS_Lib.BO
{
using ...;
[Serializable]
public class Address
{
private string _compositeStreet;
private string _buildingName;
[XmlElement(Order = 0)]
public string BuildingName
{
get { return _buildingName; }
set { _buildingName = value; }
}
[XmlElement(Order = 1)]
public string CompositeStreet
{
get { return _compositeStreet; }
set { _compositeStreet = value; }
}
}
}
事实上没有比这更多的了。没有通过内存流格式化XML响应(我在一些文章中看到过),也没有通过序列化或反序列化方法进行特定处理
是否有建议对此进行改进,以保证向服务消费者提供外语字符,或者这真的取决于呼叫系统?谢谢您的指导 为什么不创建您自己的web服务客户端(“添加服务引用”),并亲自打电话给该服务,看看它是否返回正确的数据?谢谢@JohnSaunders-我可能最终会这样做,这只是在截止日期驱动下找到时间的问题,用更多的工作日做更少的事情。我希望我不必猜测soapUI的结果,希望有经验的人能够回答ASMXWeb服务是否默认为UTF-8编码的问题。在找到另外两篇与此主题相关的帖子后,经过深入阅读,我非常倾向于“是的,他们会的”,但我肯定会尽快按照你的建议去做。你是否意识到创建一个客户、致电服务并查看结果需要不到一个小时的时间?请参阅,但您不必创建服务,因为您已经有了一个服务。
namespace Company.IT.Network.LocationStore.LS_Services
{
using . . .;
[WebService(Namespace = "Company.IT.Network.LocationStore.LS_Services.ClliRecordService")]
public class ClliRecordService : System.Web.Services.WebService
{
public ClliRecordService() { }
[WebMethod(Description = "Lengthy description")]
public VZBServiceResponse ClliLookup_VzbSite(VZBServiceRequest sRequest)
{
VZBServiceResponse sResponse = new VZBServiceResponse(sRequest);
return sResponse;
}
}
namespace Company.IT.Network.LocationStore.LS_Lib.BO
{
using ...;
[Serializable]
public class Address
{
private string _compositeStreet;
private string _buildingName;
[XmlElement(Order = 0)]
public string BuildingName
{
get { return _buildingName; }
set { _buildingName = value; }
}
[XmlElement(Order = 1)]
public string CompositeStreet
{
get { return _compositeStreet; }
set { _compositeStreet = value; }
}
}
}