如果你愿意,可以叫我一个巨魔,但我是认真的:新的SOA趋势究竟与我15年前建立的客户服务架构有什么不同?我一直听到SOA,但我不知道它与我们一直以来的不同之处.
回到10年前,我的公司有多个客户(多种语言)与同一服务进行交谈.它不是XML(它是一个名为Microsoft DCOM的二进制协议),并且没有通过WSDL进行自动发现,但这是正常的,因为阅读文档同样容易.我们的系统甚至是"开放的",因为我们记录它足以让第三方与我们的服务交谈.我们不是先锋 - 我10年前所知道的其他公司都在做同样的事情.
我在当时和现在之间看到的唯一区别是现在互联网上有一项服务,而10年前,每个客户都会托管他自己的服务实例.但这不是架构问题 - 物理上的服务对使用该服务的任何人都是透明的.
那么SOA究竟与我们多年来所做的不同呢?SOA只是一个代表最佳实践的营销术语,这个实践在很久以前就已经变得普遍了吗?或者我错过了一些与我们一直在做的不同的SOA?
基本上,我有一个服务器端类型"Foo",成员X和Y.每当我使用Visual Studio的"添加服务器参考"时,我看到WSDL和生成的代理都向所有成员附加单词"Field"并更改第一个字母的外壳.IE,"X"和"Y"被重命名为"xField"和"yField".知道为什么会这样吗?我无法弄清楚这种模式.
详细信息 - 我有一个传统的ASMX Web服务,它公开了一个"Foo"类型.我创建了一个新的WCF服务,它是旧Web服务的包装器 - 新服务只包装这些方法并可能更新几个字段的值,但它公开了完全相同的方法并返回完全相同的类型.我曾多次尝试重新创建referenes,每次都会重命名我的字段:变量"STUFF"在wsdl和proxy中显示为"sTUFFField".变量"X"显示为"xField"等.
有趣的是我无法弄清楚模式 - 我尝试创建一个新的ASMX Web服务作为测试和包装 - 变量不会被重命名.所以我无法弄清楚为什么/何时WCF重命名变量的模式.
有人知道吗?
我在同一个解决方案中有一个WCF测试服务和一个测试客户端.该服务配置为在localhost上运行(即" http:// localhost:8731/Design_Time_Addresses/MyService/Service ")我运行客户端应用程序并正确调用该服务并获得正确的答案.我已通过日志验证它确实运行了我的机器本地服务.但是,我无法在运行客户端时调试服务.WCF应该只允许单步执行,但服务上没有断点,并且进入服务调用也不起作用.有没有人见过这个?
我检查了所有明显的东西,比如"生成的PDB文件是什么?" - 是的.如果我自己运行服务项目,然后用一些测试客户端点击它,断点就会被正确命中.因此调试服务工作.我甚至可以明确地"附加到远程进程"并以这种方式调试服务.但是WCF不会自动从客户端步入服务.