我想在生成服务代理时使用svcutil将多个wsdl命名空间映射到clr命名空间.我使用名称空间的强版本,因此生成的clr名称空间很笨拙,如果wsdl/xsd名称空间版本发生变化,可能意味着许多客户端代码更改.一个代码示例可以更好地显示我想要的内容.
// Service code
namespace TestService.StoreService
{
[DataContract(Namespace = "http://mydomain.com/xsd/Model/Store/2009/07/01")]
public class Address
{
[DataMember(IsRequired = true, Order = 0)]
public string street { get; set; }
}
[ServiceContract(Namespace = "http://mydomain.com/wsdl/StoreService-v1.0")]
public interface IStoreService
{
[OperationContract]
List<Customer> GetAllCustomersForStore(int storeId);
[OperationContract]
Address GetStoreAddress(int storeId);
}
public class StoreService : IStoreService
{
public List<Customer> GetAllCustomersForStore(int storeId)
{
throw new NotImplementedException();
}
public Address GetStoreAddress(int storeId)
{
throw new NotImplementedException();
}
}
}
namespace TestService.CustomerService
{
[DataContract(Namespace = "http://mydomain.com/xsd/Model/Customer/2009/07/01")]
public class Address
{ …Run Code Online (Sandbox Code Playgroud) 我一直认为将InstanceContextMode设置为PerCall会使并发模式无关紧要,即使使用会话感知绑定(如net.tcp)也是如此.这就是MSDN所说的 http://msdn.microsoft.com/en-us/library/ms731193.aspx "在PerCallinstancing中,并发性是不相关的,因为每个消息都由新的InstanceContext处理,因此,永远不会超过一个线程在InstanceContext中处于活动状态."
但今天我正在阅读Juval Lowy的书"编程WCF服务",他在第8章写道
如果每个呼叫服务具有传输级会话,则是否允许并发处理呼叫是服务并发模式的产物.如果使用ConcurrencyMode.Single配置服务,则不会对挂起的调用进行并发处理,并且一次调度一个调用.[...]我认为这是一个有缺陷的设计.如果使用ConcurrencyMode.Multiple配置服务,则允许并发处理.呼叫在到达时分派,每个呼叫到新实例,并同时执行.这里一个有趣的观察是,为了输出,使用ConcurrencyMode.Multiple配置每个呼叫服务是个好主意 - 实例本身仍然是线程安全的(因此您不会产生同步责任) ,但您将允许来自同一客户端的并发呼叫.
这与我的理解和MSDN所说的相矛盾.哪个是对的 ?在我的情况下,我有一个WCF Net.Tcp服务使用我的许多客户端应用程序创建一个新的代理对象,进行调用,然后立即关闭代理.该服务具有PerCall InstanceContextMode.如果我将InstanceContextMode更改为Multiple而没有比percall更糟糕的线程安全行为,我是否会获得更高的吞吐量?
我正在使用IIS Powershell管理单元从头开始配置新的Web应用程序.我是PS的新手.由于PS无法识别ManagedPipelineMode枚举,因此以下脚本无法正常工作.如果我将值更改为0,它将起作用.我怎样才能让PS理解这一点.我尝试了Add-Type cmdlet并且还加载了Microsoft.Web.Administration程序集而没有任何成功,现在注释了这些行.
如何让这个PS脚本与枚举一起使用?
#Add-Type -AssemblyName Microsoft.Web.Administration
#[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
Import-Module WebAdministration
$AppPoolName = 'Test AppPool'
if ((Test-Path IIS:\apppools\$AppPoolName) -eq $false) {
Write-Output 'Creating new app pool ...'
New-WebAppPool -Name $AppPoolName
$AppPool = Get-ChildItem iis:\apppools | where { $_.Name -eq $AppPoolName}
$AppPool.Stop()
$AppPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value "v4.0"
$AppPool | Set-ItemProperty -Name "managedPipelineMode" -Value [Microsoft.Web.Administration.ManagedPipelineMode]::Integrated
$AppPool.Start()
}
Run Code Online (Sandbox Code Playgroud)
错误消息是:
Set-ItemProperty:[Microsoft.Web.Administration.ManagedPipelineMode] :: Integrated不是Int32的有效值.
我有一个带net.tcp传输的WCF客户端/服务.当我在客户端打开WCF跟踪时,我在跟踪中看到以下错误(请参阅服务跟踪查看器中的屏幕截图).奇怪的是,WCF正在处理和恢复此错误,我的客户端没有收到任何异常,它继续工作.此异常频繁地随机发生,但不会在每个Web方法调用上发生.客户端(Windows XP)身份验证是Windows,服务由SPN识别,服务是在NLB后面的Windows服务上自托管(Windows Server 2003).任何人都可以解释我在这里发生了什么.
trace xml中的异常堆栈跟踪是:
<ExceptionString>
System.ServiceModel.Security.MessageSecurityException: The server rejected the upgrade request. ---> System.ServiceModel.ProtocolException: Error while reading message framing format at position 0 of stream (state: ReadingUpgradeRecord) ---> System.IO.InvalidDataException: More data was expected, but EOF was reached.
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
</ExceptionString>
Run Code Online (Sandbox Code Playgroud)
:
我在Windows Server 2003 R2上运行了一个Windows服务(C#,. NET 2.0).在一个服务器中,System.Threading.Thread.CurrentThread.CurrentCulture{en-AU}和另一个{en-US}.这在DateTime对象上调用ToString()时会产生差异.我希望文化是{en-AU}.
我检查了"区域和语言设置".在两个服务器中,"区域选项"选项卡显示"英语(Asutralia)".但在"高级"标签中,其中一个显示"英语(美国)",另一个显示"英语(澳大利亚)".所以这必然会造成差异.虽然我想知道为什么"高级"选项卡上写着"你想要使用的非unicode程序的语言版本",但我认为.NET进程是Unicode,不应受此影响.
.NET运行时如何确定要使用的文化?任何详细的参考都会有所帮助.
我正在使用DDD设计WCF服务.我有一个域服务层,它调用存储库来创建域对象.存储库使用ADO.Net而不是ORM实现.数据来自使用存储过程的DB.在创建对象时,说一个地址,SP返回一个状态的id.SP不会将地址表与状态表连接.状态由具有id,abbr和name属性的值对象类State表示.当应用程序启动时,状态对象列表可以缓存(使用system.runtime.caching.memorycache),因为它是非易失性数据.通常我有一个LookupDataRepository,它可以从表中检索所有这些查找数据.现在,AddressRepository必须从状态id填充地址的State属性.
伪代码:
class AddressRepository : IAddressRepository
{
Address GetAddressById(int id)
{
// call sp and map from data reader
Address addr = new Address(id);
addr.Line = rdr.GetString(1);
addr.State = // what to do ?, ideally LookupCache.GetState(rdr.GetInt32(2))
}
}
class State
{
public int Id;
public string Abbr;
public string Name;
enum StateId {VIC, NSW, WA, SA};
public static State Victoria = // what to do, ideally LookupCache.GetState(StateId.VIC)
}
// then somewhere in address domain model
if(currentState = State.Victroia)
{
// …Run Code Online (Sandbox Code Playgroud) 我是Windows手机编程的新手......任何好书都可以开始......所以我可以学习必需品......或者任何其他好的网站开始???
wcf ×3
.net ×1
c# ×1
caching ×1
datetime ×1
iis-7 ×1
powershell ×1
repository ×1
svcutil.exe ×1
tcp ×1
wcf-security ×1