我在visual studio中构建了世界上最笨拙,最简单的SOAP服务器,大约3次点击.Visual Studio 2010中的确切步骤:首先将新项目创建为Web应用程序,然后添加Web服务类型的新项目.(有关图片,请参阅此处接受的答案.)soap服务器服务Service1有一个简单的方法GetData:
来自clientService1.pas的片段,使用WSDL导入器创建...
IService1 = interface(IInvokable)
['{967498E8-4F67-AAA5-A38F-F74D8C7E346A}']
function GetData(const value: Integer): string; stdcall;
function GetDataUsingDataContract(const composite: CompositeType2): CompositeType2; stdcall;
end;
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此方法时,如下所示:
procedure TForm3.Button1Click(Sender: TObject);
var
rio : THTTPRIO;
sv:IService1;
addr : string;
data : string;
begin
//addr := '....'; // url from visual studio 2010 live debug instance.
rio := THTTPRIO.Create(nil);
sv := GetIService1( true, addr, rio );
try
data := sv.GetData( 0);
Button1.Caption := data;
finally
sv := nil;
rio.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是这样的:
ESOAPHTTPException:
The …Run Code Online (Sandbox Code Playgroud) 如果我使用C#,我可以使用.net框架的SqlDataSourceEnumerator来发现并向用户显示网络上的SQL Server实例列表.
我怎么能在Delphi中做到这一点?
我有一个很大的代码库,我正在使用它有这样的单位:
unit myformunit;
interface
type
TMyForm = class(Form)
end;
procedure not_a_method1;
procedure not_a_method2;
var
global1,global2,global3:Integer;
...
Run Code Online (Sandbox Code Playgroud)
简而言之,代码的作者没有编写方法,他们编写了全局程序.有成千上万的人.在这些过程中,它们引用了单个实例MyForm:TMyForm.
我正在考虑编写一个解析器/重写器实用程序,它将把这个代码变成"至少是面向对象的代码".策略是将接口和实现部分全局变为表单,作为开始.我意识到这不是优雅的OOP.但这是全球化的一步.
如果我一次可以在一个单元上执行此操作,我可能能够修复项目其余部分的破损,如果我一次只能在一个表单上执行此操作.但我想,以减少而不是做手工的时候需要重写单位的金额.有些表单有500多个过程和500多个接口和实现全局变量,实际上,这些变量特定于它们与同一单元中的单个表单实例的状态.
基本上,如果没有这样的话,我会做的就是编写一个基于Castalia Delphi解析器的解析器.我希望也许ModelMakerCodeExplorer,或者castalia,或其他类似的工具有一些东西至少可以做我需要的一部分,所以我不必自己构建这个实用程序.即使我必须建立它自己,我估计它可能会自动大约有一千至2000小时咕噜工作的我.我至少可以运行它,然后看看有多少中断,然后在我决定重构这段代码的努力之后还原或提交.
实现相同目标的替代策略(从零封装和零OOP,到更多封装,稍微超过零OOP,以增量方式,在大型非结构化delphi代码库上,仅在不可避免的情况下使用对象,并且永远不会对真正的OOP有任何想法,欢迎.
所以他们改变了他们在asp.net 5 rc1和rc2之间引导web应用程序的方式.
它曾经是:
public static void Main(string[] args) => WebApplication.Run<Startup>(args);
Run Code Online (Sandbox Code Playgroud)
但在RC2中,我不再引用静态类WebApplication.有任何想法吗?
我的应用程序已经有一种模式多年,客户可以"禁用对操作系统的访问".显然这个功能与谷物相悖(至少就Windows而言),但有些安装我的应用程序是唯一一个应该可见的机器操作员程序,在这种情况下这样的功能是有用的.
我使用的技术是从几个"层"构建的:
要禁用我使用的任务栏:
// Get a handle to the taskbar and its button..
Taskbar := FindWindow('Shell_TrayWnd', Nil);
StartButton := FindWindow('Button', Nil);
// Hide the taskbar and button
if Taskbar <> 0 then
ShowWindow( Taskbar, SW_HIDE );
if StartButton <> 0 then
ShowWindow( StartButton, SW_HIDE );
// Set the work area to the whole screen
R := Rect( 0,0,Screen.Width,Screen.Height );
SystemParametersInfo(
SPI_SETWORKAREA,
0,
@R,
0 );
Run Code Online (Sandbox Code Playgroud)
这很好用,但在W7上似乎还算不错.研究如何在几年前禁用任务切换发现了唯一一种"假装"你的应用程序是屏幕保护程序的技术(除了将应用程序重命名为'explorer.exe'并启动它等等)之外的其他方法:
procedure EnableTaskSwitching( AState : boolean );
// Enables / disables task …Run Code Online (Sandbox Code Playgroud) 我有一个我在Delphi XE中构建的组件,我希望以下列方式使用它:
用户创建一个新的空白项目.
用户在表单上删除我的组件.
我的组件中会执行一些特殊的Designtime代码,这将更改项目选项以取消选中项目选项中的"启用运行时主题"复选框.我不确定这是否可能,所以我问是否可能.
如果#3不可能,那么我需要用这个组件解决我的"可用性"问题; 我遇到的问题是,如果用户不通过取消选中启用运行时主题来禁用静态链接的清单文件,那么链接到EXE的静态生成的清单似乎会覆盖我想要在EXE之外的外部清单文件,磁盘.我还需要在运行时修改这些清单,因此需要外部清单.当然,我可以在需要时使用这些清单启用运行时主题功能.第二个问题是关于外部和内部清单的优先级; 当您选中"启用运行时主题"时,外部清单能否以某种方式优先于链接到Delphi应用程序的内部清单资源?
除#3以外的可接受的解决方案:
A.不知何故导致Delphi无法生成清单.B.不知何故,在运行时,Windows会识别外部.manifest文件并确定其优先级,即使找到内部文件也是如此.
C.最不好的解决方案; 在运行时,在我的组件中的CoCreateInstance失败之后,我可以枚举资源,报告外部清单存在并且弄乱我们,并依赖于使用我的组件的开发人员读取我的组件吐出的运行时错误消息,告诉他们禁用运行时主题复选框并重建他们的应用程序 提取和读取清单已在此处的另一个stackoverflow问题中介绍,其中C++代码可以轻松转换为Delphi.
更新接受的答案完全符合我的要求,但被认为是黑客攻击,大卫关于激活上下文的答案更加明智,是推荐的方法.
Update2内置清单通常在更高版本的Delphi(XE5及更高版本)中通过项目设置明确指定要链接的清单来覆盖.
有没有什么方法可以让Delphi IDE每隔X分钟自动保存所有打开的项目,或者只是在编译之前?我看着XE2和Gexperts并没有看到任何东西,但这意味着什么,因为我很厚.
有没有人通过互联网真实体验火鸟数据库?
我有一个典型的Windows会计/ ERP软件(用Delphi完成),与Firebird数据库服务器工作得很好.现在我的网友(300 aprox的.现在,而是应该增加)也希望"在云中"的工作(从连接办公室,从笔记本电脑,从房子等).将标准Web应用程序的所有内容重新创建是很多工作(例如,HTML + CSS + JS + PHP + MYSQL),所以我正在考虑保留win客户端(我不关心其他操作系统)但不是生活在客户端局域网中的服务器将其移动到我将收缩的一对专用服务器(一个主服务器和一个辅助服务器再次启动失败).
搜索我遇到了这个常见问题解答http://www.firebirdfaq.org/faq53/,它解释了fb协议,它不适合在互联网上工作,但今天我的所有用户仍然至少有1MBbit /秒ADSL互联网连接(我认为这不像faq那样慢).
有人这样做过吗?经历是什么?fb服务器对互联网开放有多安全?他们的规模如何?
我知道,建立一个"中间件"与SOAP例如将是比较正常的,但我依然评估这里的解决方案是更加快速和容易的(我仍然有与复制,备份,hearbreath服务的一些工作,但它的很多不到为网络重做一切).
谢谢!编辑:FB版本:2.5.
我想这也是为什么VCL样式还没有准备好真正使用的另一个原因.
没有VCL样式,TDateTimePicker控件看起来很好.打开任何vcl样式,我得到这样的外观:

我可以通过注册一个样式钩子来关闭这个组件类型的vcl样式,但这看起来很丑陋.
这是在安装了更新4的Delphi XE2上.
理想情况下,我希望有一个解决方法,或日期时间选择器的一些属性,或datetimepicker的一些子类,我可以做,以强制日期时间选择器正确绘制和主题.
请注意,正常的组合框正确主题.请注意,这可以在可以想象的最小样本项目中轻松再现.是.这是另一种风格的错误.
更新它可能是特定于平台的,与没有Aero的Windows Server 2008 R2上的Windows公共控件版本相关(Windows服务器组件术语中的"桌面体验").在其他人无法重现它之后,我才想到它,在几台不同的Windows机器上试试这个.在我这样做之后,我发现该问题仅在Windows Server 2008 R2上重现.我们的一些客户使用Windows Server 2008 R2.如您所知,使用VCL样式的一个主要原因是,无论Windows主题是什么,它都会使您的应用看起来一样.但是在上面的例子中,整个应用程序主题正确,除了DateTimePicker控件,它是错误的主题,并且只在Windows Server 2008 R2上.相同的基于XE2的演示应用程序在Windows 7上运行良好.
工作和非工作系统都在SysWow64文件夹中有一个ComCtl32.dll,版本读数为5.82.7601.17514.但是,很明显,当VCL主题关闭时,这些控件的原生布局和外观会有所不同,这会影响失败的外观代码.
Update2:报告为错误:QC Entry 106783
根据这个问题,我知道git中的core.autocrlf = true会导致CRLF转换为LF.
但是,当我键入:git config core.autocrlf
我明白了:假
但是,当我暂存已经在repo中的已修改文件时,我仍然会收到以下警告:
Warning: CRLF will be replaced by LF in File1.X.
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)
我的猜测是文件的repo副本已经设置为"autocrlf = true".
问题:A.如何查询文件或git仓库是否已经强制AutoCrlf?B.如何关闭autocrlf?
delphi ×8
delphi-xe2 ×2
asp.net ×1
asp.net-core ×1
delphi-xe ×1
firebird ×1
gexperts ×1
git ×1
manifest ×1
oop ×1
ota ×1
refactoring ×1
security ×1
soap ×1
sql-server ×1
taskbar ×1
toolsapi ×1
vcl-styles ×1
windows ×1
winsxs ×1