小编Blu*_*kMN的帖子

如何在没有IDL或后期绑定调用远程处理方法的情况下访问CORBA接口

我们一直在使用SAP"COM许可证桥"来访问其许可证服务器并以编程方式查询系统的硬件密钥(以重用自己的许可证).这在SAP Business One版本2007A,2007B和8.8上运行良好,但是在8.81中它们似乎更新了它们的CORBA接口而没有更新COM包装器,因为我们现在在尝试调用GetHardwareKey函数时获得了内存异常.

所以我下载了IIOP.NET并开始尝试编写自己的界面.无论如何我从来都不喜欢COM包装器.但我遇到了我的旧远程.NET远程控制 - 无法在服务器和客户端都没有定义公共接口的情况下调用远程方法.我尝试使用IIOP.NET附带的IDL到CLS编译器,但我继续得到关于接口beign不兼容的错误(SAP没有提供IDL文件).我不知道IIOP和CORBA如何确定接口是否兼容.但我甚至尝试调试IIOP.NET代码并强制它执行该方法,尽管不兼容,但收到一个空字符串而不是我想要的硬件密钥.

我的下一步是尝试实现虚假的许可证服务器并检查来自生产客户端的请求,以期确定它们应该是什么样子,但考虑到我遇到的困难,我并不指望取得多大的成功.深入了解.NET远程的内容.

我真正的问题是如何获取或生成SAP Business One硬件密钥,但由此产生的问题包括:

  1. 如何反思或查询有关CORBA接口的信息?我可以使用NamingContext类的list方法来检索可用对象的列表,但是我不知道是否有办法查询对象上的可用方法.
  2. 我可以在没有接口的情况下动态调用.NET远程处理方法吗?我看到有一种叫做DII的东西用于动态调用CORBA,但是我没有看到如何在IIOP.NET中使用它.
  3. 我可以仅使用委托或不完整的接口来调用.NET远程处理方法吗?我尝试使用dynamic关键字,但它无法在我的MarshalByRef远程对象上调用方法...我认为它说我的MarshalByRef实例上没有这个方法.我只是通过IIOP.NET尝试过这个(我想知道它是否适用于普通的.NET远程处理).
  4. 如何在.NET远程处理框架中创建或检查Message实例?
  5. 我可以直接发送或检索远程处理消息,绕过底层代理吗?

编辑:我设法通过应用RepositoryID属性使IIOP.NET/CORBA相信我有一个兼容的接口:

[Ch.Elca.Iiop.Idl.InterfaceType(Ch.Elca.Iiop.Idl.IdlTypeInterface.ConcreteInterface)]
[Ch.Elca.Iiop.Idl.RepositoryID("IDL:LicenseInfo:1.0")]
public interface ILicenseInfo : Ch.Elca.Iiop.Idl.IIdlEntity
{
    void GetHardwareKey(out string hwKey);
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到一个空字符串结果.

编辑2:经过一些实验和调试之后,我发现响应消息确实包含了我正在寻找的数据,但是没有正确地解析成客户端值,可能是因为我的接口定义不好.希望进一步调试响应处理将帮助我弄清楚如何纠正我的界面.奇怪的是,它从响应中解析的第一件事是一个空的盒装值,这似乎不适合"out string"参数.

编辑3:我发现我需要将字符串属性应用于这样的参数,以防止它们被视为盒装值:

void GetHardwareKey([StringValue(), WideChar(true)] out string hwKey);
Run Code Online (Sandbox Code Playgroud)

但是,尽管有WideChar属性,我对CodeSet不支持WChar或其他东西的错误.我已经非常接近搞清楚了.

编辑4:我对如何为WChar设置代码集感到困惑.如果我没有设置它,我收到一个错误:"未指定或不支持WChar代码集." 因为服务器返回了一个unicode字符串而没有覆盖默认字符集.我找不到任何方法来覆盖客户端.我试着打电话:

omg.org.CORBA.OrbServices.GetSingleton().OverrideDefaultCharSets(
    CharSet.UTF8, WCharSet.UTF16);
Run Code Online (Sandbox Code Playgroud)

但这似乎对客户端没有任何影响.示例代码显示在服务器端调用它.但我没有写服务器,所以我无法控制它.我唯一的选择是为了我自己的目的重写IIOP.NET代码,强制默认的WChar CodeSet生效?

.net c# remoting corba iiop

9
推荐指数
1
解决办法
7755
查看次数

托管的无Reg COM服务器将无法激活

我开始使用一个非常复杂的客户端和服务器系统,带有COM引用和其他东西,我一直在减少,直到我意识到我甚至无法获得Microsoft示例代码来管理受管COM服务器的免注册COM激活用C#编写.

服务器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices;
using System.ComponentModel;

namespace ClassLibrary1
{
   [Guid("A7AC6D8C-FF17-4D2C-A3B1-2C8690A8EA04")
   ,ComVisible(true)]
   public interface IClass1
   {
      [DispId(1)]
      string DummyFunction(string inputValue);
   }

   [Guid("81723475-B5E3-4FA0-A3FE-6DE66CEE211C"),
   ClassInterface(ClassInterfaceType.None),
   ComDefaultInterface(typeof(IClass1)),
   ComVisible(true)]
   public class Class1 : IClass1
   {
      public string DummyFunction(string inputValue)
      {
         return inputValue.Substring(0, 1) + " Inserted " + inputValue.Substring(1);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

客户端VB6代码:

Dim c As ClassLibrary1.Class1
Set c = New Class1
MsgBox c.DummyFunction("Ben")
Run Code Online (Sandbox Code Playgroud)

客户端C++代码:

#include "stdafx.h"

#import <ClassLibrary1.tlb> raw_interfaces_only

using namespace ClassLibrary1;

int _tmain(int …
Run Code Online (Sandbox Code Playgroud)

c# c++ vb6 com regfreecom

9
推荐指数
1
解决办法
1791
查看次数

如何确定分布式事务超时的原因

我正在使用LINQ to SQL和支持分布式事务的第三方SDK.当我意识到挂起的更新将更新第三方SDK中的SQL记录和记录时,我正在创建一个具有0(可能是无限的)超时的TransactionScope(尽管我还尝试了12小时作为时间跨度参数).然后我在环境事务(由transactionscope创建)上使用GetDtcTransaction来获取DTC事务以链接到第三方SDK.事情很好地工作了大约10分钟,但在10分钟后,事务消失并发生错误.如何确定交易消失的原因.我怀疑这是暂停,因为它经常在10分钟后发生,即使在那时已经完成了稍微不同程度的工作.但我对如何确定终止交易的原因,原因以及如何延长其生命感到茫然.

我尝试使用SQL事件探查器跟踪以下事件:

  1. 所有错误和警告事件
  2. 除"审核模式对象"事件之外的所有安全事件
  3. 除SQLTransaction和TransactionLog事件之外的所有Transaction事件

所有我在错误发生时都会遇到以下事件:

<Event id="19" name="DTCTransaction">
  <Column id="3" name="DatabaseID">1</Column>
  <Column id="11" name="LoginName">sa</Column>
  <Column id="35" name="DatabaseName">master</Column>
  <Column id="51" name="EventSequence">167065</Column>
  <Column id="12" name="SPID">10</Column>
  <Column id="60" name="IsSystem">1</Column>
  <Column id="1" name="TextData">{D662BBC4-21EC-436D-991C-DCB061A34782}</Column>
  <Column id="21" name="EventSubClass">16</Column>
  <Column id="25" name="IntegerData">0</Column>
  <Column id="41" name="LoginSid">01</Column>
  <Column id="49" name="RequestID">0</Column>
  <Column id="2" name="BinaryData">C4BB62D6EC216D43991CDCB061A34782</Column>
  <Column id="14" name="StartTime">2009-11-11T13:55:32.82-06:00</Column>
  <Column id="26" name="ServerName">.</Column>
  <Column id="50" name="XactSequence">0</Column>
</Event>
<Event id="33" name="Exception">
  <Column id="3" name="DatabaseID">9</Column>
  <Column id="11" name="LoginName">sa</Column>
  <Column id="31" name="Error">1222</Column>
  <Column id="35" name="DatabaseName">ACS</Column>
  <Column id="51" name="EventSequence">167066</Column>
  <Column id="12" name="SPID">19</Column>
  <Column id="20" …
Run Code Online (Sandbox Code Playgroud)

.net vb.net msdtc sql-server-2005 linq-to-sql

8
推荐指数
1
解决办法
4005
查看次数

TFS 2010 Team Build Revision $(Rev:.r)存储在哪里?

TFS 2010公开了一个"Build Number Format"属性,它包含$(BuildNumberDefinitionName)和$(Rev:.r)变量(以及其他内容).我问题的两个半部分:

  1. 这里可以使用的所有可用变量是什么?

  2. $(Rev:.r)的值来自哪里(存储在哪里)?

    一个.可以重置或更改吗?

tfsbuild tfs2010

8
推荐指数
1
解决办法
5448
查看次数

Javascript序列化的类型对象

我不清楚序列化/反序列化应该如何处理JavaScript中的类型化对象.例如,我有一个包含各种成员和数组的"MapLayer"对象.我已编写(但尚未测试)以下代码以尝试序列化它:

MapLayer.prototype.serialize = function() {
   var result = "{tileset:tilesets." + tilesets.getTilesetName(this.tileset) + ",columns:" + this.columns + ",rows:" + this.rows + 
   ",offsetX:" + this.offsetX + ",offsetY:" + this.offsetY + ",currentX:" + this.currentX + ",currentY:" + this.currentY + 
   ",scrollRateX:" + this.scrollRateX + ",scrollRateY:" + this.scrollRateY + ",virtualColumns:" + this.virtualColumns + ",virtualRows:" + this.virtualRows +
   ",tiles:\"" + this.encodeTileData2() + "\"";
   for(key in this)
   {
      if(this[key] instanceof Sprite)
         result += "," + key + ":" + this[key].serialize();
   }
   return result;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将结果对象作为MapLayer对象而不是通用对象进行反序列化.如何将所有Sprite实例作为精灵进行反序列化.我应该使用"new MapLayer()"而不是"{}"吗?或者我只是想在序列化中包含对象的原型和构造函数属性?还有什么我想念的吗?我这样做是一种愚蠢的方式吗?我没有使用通用序列化/反序列化代码有两个原因:

  1. 我想以优化的格式序列化tile数据,而不是为每个tile存储一个base-10字符串表示,并用逗号分隔它们. …

javascript serialization json

8
推荐指数
1
解决办法
2119
查看次数

Java中的字节大小枚举

我有一类可能有很多实例(在移动设备上),所以我试图最小化大小.我的一个字段是"DrawTarget",它指示是否忽略绘图操作,排队到路径或绘制到显示.我希望它只占用一个字节,因为只有3个可能的值,但我还希望它是友好的代码,所以我没有全部硬编码的数字.一种想法是使用枚举像:

public enum DrawTarget {
    Invisible,
    Path,
    Canvas
}
Run Code Online (Sandbox Code Playgroud)

但是根据我的阅读,Java枚举不允许您指定内存布局 - 我不能请求枚举值表示字节大小的值 - 我想枚举值最终是整数大小的值在Java中.

所以我想可能在枚举中创建一个隐式转换运算符...这在Java中是否可行?或者是我在枚举中实现类似内容的最佳选择:

public static DrawTarget fromValue(byte value) {
    switch (value) {
    case 0:
        return Invisible;
    case 1:
        return Path;
    default:
        return Canvas;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我想要访问值的地方调用DrawTarget.fromValue?

或者我应该创建一个单字节类,因为显然(从我在研究中看到的)枚举基本上只是Java中的特殊类?

public class DrawTarget {
    public static final byte Invisible = 0;
    public static final byte Path = 1;
    public static final byte Canvas = 2;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用最后的解决方案,如何表示枚举实例的值?我仍然需要一种方法来允许"="运算符接受类的一个静态字段......比如转换构造函数或赋值运算符重载.

但是,我怀疑任何类对象作为引用类型,每个实例都需要多于一个字节.真的吗?

java memory android

7
推荐指数
1
解决办法
3701
查看次数

平台游戏的2D物理引擎 - 乘坐平台

发表于游戏开发:用于平台游戏的2D物理引擎 - 骑在平台上

我有很多关于在平台游戏中使用2D物理引擎的问题,但是我正在努力解决的一个主要问题.我设法将Physics2D.Net引擎集成到Scrolling Game Development Kit 2项目中.我对物理学的表现和现实感到非常满意.但是,我失去了一些东西,我原来的SGDK2物理引擎(更专门针对平台游戏)变得更容易:

  1. 现在骑在平台上非常困难.这是我的主要问题.实施起来并不困难,但很难发挥.假设我甚至设法让玩家进入一个平台(这本身就足够了),一旦平台移动,玩家就会掉线,因为玩家和平台之间没有足够的摩擦力.我是否只需要调整诸如摩擦,惯性,线性速度阻尼之类的东西,以便更容易在平台上骑行,或者在平台上骑行是否有根本困难的"真实"世界?我已经尝试减少施加在平台上的力,使其移动(这样可以让骑手有更多的时间来匹配平台的速度),但那时力不足以让骑手保持高空,平台下沉到地面.我只是用力来移动平台.
  2. 阻止平台旋转的最佳方法是什么?我已经尝试将每个框架上的角度动量和角度位置设置为0,但是这可能会导致很少的抽搐导致平台上的任何东西弹到空中,只要足够长的时间就会脱落.
  3. 沿着地面奔跑:大多数具有真实2D物理的平台游戏如何实现玩家?我的播放器目前是一个正方形,但由于摩擦撞击其中一个角落,它经常会翻滚并弹到空中.我的猜测是玩家应该是一个圆圈并且总是直立.这是标准做法,还是有另一种方式?如果我使用一个圆圈,我希望骑平台会更加困难!玩家将立即滚动.我正在考虑小大星球,它似乎也很好地让玩家保持在地面上.如果我想让它们保持接地,我是否只需要在播放器上放置很多速度阻尼,或类似的东西?
  4. 由于SGDK2是一个基于图块的引擎/ IDE,我编写的代码可以分析地形/图块的所有形状,并将它们转换为具有无限质量的物理体(水平合并它们,但不适当地垂直合并;合并两个方向也是如此)我很难弄清楚,因为我无法弄清楚如何在圆环状的地层中追踪和表示洞.对于平台游戏来说,这是一个很好的方式来实现精灵与之互动的东西来代表坚实的基础吗?我最好把每块瓷砖变成一个物理体(很少有简单的形状,很多物体和瓷砖之间的内部表面),或者像我一样合并它们(更少的物体,但更多的形状更复杂)?
  5. 我很难搞清楚要使用的最佳顶点细分级别和网格间距.据我所知,我真的不明白这些概念和Pysics2D.Net上的文档是稀疏到不存在的.我通常细分到大约6并使用大约相同的网格间距.我的精灵和瓷砖大多是32x32单位(像素),目前都是正方形.

c# physics 2d

6
推荐指数
0
解决办法
1482
查看次数

如何从VS 2012创建XBAP

我认为使用WPF和XAML创建我的应用程序会使它更具可移植性,甚至可以通过网络执行,但我无法弄清楚它如何与VS 2012一起工作.我正在查看的资源是说我需要创建一个XBAP,在VS 2010中创建一个新项目时应该是一个选项.但是我在VS 2012中选择新的C#应用​​程序是:

  • Windows窗体应用程序
  • WPF应用程序
  • 控制台应用
  • 班级图书馆

我将我的应用程序创建为WPF应用程序,并将其切换到目标.NET 3.5客户端配置文件,以便更向后兼容.但无论我的应用程序是嵌入在ZIP文件中还是作为直接EXE提供,Chrome和IE 9都报告它可能是恶意的.我不记得以前在.NET之前的可执行文件中都会收到如此惊人的警告.为什么浏览器对应该能够在沙盒更安全的环境中运行的应用程序的突然危言耸听响应不会少?

我尝试过签署程序集并提供ClickOnce安装程序并签署ClickOnce清单.这允许它在IE中运行得更好,但不能在Chrome中运行.

我尝试将项目安全设置切换为"这是一个部分信任应用程序",但这会产生错误"该程序集不允许部分信任的调用者".当我添加[assembly: System.Security.AllowPartiallyTrustedCallers]到AssemblyInfo.cs中,然后我得到一个错误尝试加载PresentationFramework.dll:"请求类型System.Security.Permissions.UIPermission,mscorlib中的"许可,版本= 2.0.0.0,文化=中性公钥= b77a5c561934e089'失败了."

XBAP发生了什么?VS 2012 Express无法创建浏览器应用程序吗?

c# wpf xbap

6
推荐指数
1
解决办法
3122
查看次数

只有在安装支持Android应用程序时,HTML才会重定向到自定义协议

我想让我的应用程序的所有URI启动我的应用程序,如果它已安装.如果没有安装,我想显示一个关于我的应用程序的网页.看了以下两个问题后,我仍然找不到可靠的解决方案.

Intent过滤器适用于Google+,但不适用于Chrome和Facebook

Android - 如果未安装应用程序,则重定向存储(从网站启动)

第一个解决方案(重定向)的问题是,当未安装应用程序时,重定向到自定义协议会导致错误页面,如第二个问题中所述.第二个解决方案(使用具有服务器名称的意图过滤器的http协议)的问题在于Chrome不支持意图过滤器,如第一个问题中所述.所以现在的问题是,有没有办法防止在没有安装支持的应用程序时发生重定向?

html redirect android intentfilter android-intent

6
推荐指数
1
解决办法
1255
查看次数

如何在SQL中处理Unicode替换字符 (0xFFFD/65533)

我甚至不知道一周前就存在Unicode替换字符( ).现在我知道至少在SQL中似乎存在一些非常特殊和奇怪的逻辑.例如:

select replace(N'bl' + NCHAR(65533) + N'rt', NCHAR(65533), N'X')
Run Code Online (Sandbox Code Playgroud)

返回bl rt而不是blXrt.和:

select CHARINDEX(NCHAR(65533), N'b' + NCHAR(65533) + N't')
Run Code Online (Sandbox Code Playgroud)

返回0而不是2.我只是想确定表中的哪些字符串包含这个字符,我找不到一种直接的方法来执行它.对这个角色的处理是如此奇怪,必须有更多我可以了解它.定义的行为在哪里,更具体地说,在MS SQL Server数据库中查找包含此字符的字符串的最简单方法是什么?

编辑 对于试验答案的任何人,我建议您根据以下数据测试您的答案:

create table Test([Value] nvarchar(100) not null)
insert into Test([Value]) values('b' + NCHAR(65533) + 't')
insert into Test([Value]) values('b?t')
insert into Test([Value]) values('bat')
Run Code Online (Sandbox Code Playgroud)

sql sql-server unicode

6
推荐指数
1
解决办法
2866
查看次数