我的 .NET ASMX Web 服务正在接受来自我无法直接控制的客户端的请求。它正在发送一个如下所示的请求:
POST /Service.asmx HTTP/1.1
Connection: Keep-Alive
Pragma: no-cache
Content-Length: 1382
Content-Type: text/xml
Accept: text/xml
Host: localhost
User-Agent: Borland SOAP 1.1
SOAPAction: "http://domain.com/InsertRecords"
<?xml version="1.0"?>
<SOAP-ENV:Envelope... <v>ÄLMÅ BÄCK</v></SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
在我的 WebMethod 中,字符串 ÄLMÅ BÄCK 被转换为 ??LM?? B??CK——典型的编码混乱。
在我的测试中,我发现如果我简单地调整 content-type 标头,一切都很好:
Content-Type: text/xml; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
为什么 .NET 在未指定时选择 utf-8 以外的编码,有什么方法可以强制此 ASMX 使用 UTF-8 编码?
我会尽量保持这种简洁,但希望不要错过任何重要信息.我相信的代码提供了所有细节,但我遗漏了噪音(这是VB,所以有很多噪音:)).
"Case"对象有许多"赋值":
Public Class Case
Property CaseId As Guid
Property Assignments As ISet(Of CaseAssignment)
End Class
Public Class CaseAssignment
Property Case As Case
Property RoleId As Guid
End Class
Run Code Online (Sandbox Code Playgroud)
我已经交过的数据模型看起来与你期望的一样,除了CaseAssignment是一个复合键:
table Case
CaseId uniqueid not null primary key
...
table CaseAssignment
CaseId uniqueid not null
RoleId uniqueid not null
PK := (CaseId, RoleId)
FK from CaseId -> Case.CaseId
Run Code Online (Sandbox Code Playgroud)
最后,Fluent NHibernate映射:
Class CaseMapping
Public Sub New()
Table("Case")
KeyColumn("CaseId")
HasMany(Function(x) x.Assignments).KeyColumn("CaseId").Cascade.AllDeleteOrphan()
End Class
Class CaseAssignmentMapping
Public Sub New()
Table("CaseAssignment")
CompositeId() _
.KeyReference(Function(x) …Run Code Online (Sandbox Code Playgroud) 我们将CruiseControl.NET用于构建服务器,Subversion用于源代码控制.我们的IT人员建议将这些放在一台虚拟机上.出于某些原因,我闻起来很有趣,但我无法解释原因.似乎源控制服务器比构建服务器更不像服务器那样"瞬态".有没有其他人对这个想法感到不舒服,也许可以解释为什么?
我意识到VM很便宜; 这里有其他考虑因素,我没有解释.这个问题的范围是:将构建服务器和源代码控制服务器放在一个盒子上有什么不理想或有风险吗?