我正在维护SOAP Web服务(ASP.NET 2.0版),我必须进行一些修改,以修改特定方法的返回值.
在不破坏现有实现的情况下,通常接受的方法是什么.
我最初的想法是,以下一切都是可能的.
a)在现有Web服务中提供新版本特定方法,例如getPerson_v1.4
b)提供带有新版本号的.asmx文件的完整副本,例如http:/www.example.com/AdminWS_V1_4.asmx.这不是我喜欢的想法,因为该服务有超过50种方法,并且复制代码以更改2/3方法似乎是太多重复的代码.
c)重写Web服务构造函数以允许传入版本号.这似乎不起作用,并且在反思时我不确定如何在WSDL中表示它
是否有一种普遍接受的方式,或者人们根据他们在这一领域的经验提出建议.
我有一种情况,我需要维护我的版本的版本信息.通过谷歌搜索我发现有限的信息.一种方法是在源代码控制上创建一个版本文件并继续更新.另一种是使用源代码控制版本号.最后一个是使用竹编号.我以前没有实现任何这个.colud任何人指出每种方法的利弊.
谢谢你,雷迪.
请至少告诉我你用哪种方法实现同样的方法.Thnq ..
我刚刚开始使用GIT(我来自cvs)并希望使用Git设置类似于cvs/svn的东西.我执行了以下步骤:
cd o:/repository
git init
cd <working directory>
git clone o:/repository
Run Code Online (Sandbox Code Playgroud)
我现在创建了一个名为file.txt的文件,其中一些内容执行"git status"列出了适当的更改.
然后我做
git add file.txt
git commit file.txt
Run Code Online (Sandbox Code Playgroud)
两者似乎都很好.
当我这样做时
git push,我收到以下错误:
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'o:/repository'
Run Code Online (Sandbox Code Playgroud)
我首先尝试执行pull,以及为push命令指定origin和master变量但是没有工作.
有人可以告诉我我错过了什么.我正在运行Windows 7 64位.
PS.我也试过了
git push origin master
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
Counting objects: 3, done.
Writing objects: 100% (3/3), 251 bytes, done.
Total …Run Code Online (Sandbox Code Playgroud) 使用中的答案,建议这个问题,以及本文它提供了一个几乎相同的解决方案,我一直在试图建立的htaccess来处理我的js和css文件自动版本化的规则.
我想这样做的原因是,我改变他们了不少,但还是希望他们能够通过积极长时间浏览器缓存,而不必每次都改变时手动输入一个新的版本号.
使用的方法很简单:(1)一个函数在模式上使用它们被更改的日期将文件编号附加到文件[filename].[version_number].[suffix],因此style.css,例如,将变为style.1300638388.css; (2)使用php,版本号包含在我网站页面的样式表声明中,如果版本化文件名与缓存文件名不同,则会向客户端浏览器提供新副本; (3)使用mod_rewrite的.htaccess中的RewriteRule重写版本号,将其恢复为原始值并提供更新后的文件.
下面列出了我在这三个阶段中使用的代码.我在http://edge.donaldjenkins.net/上我博客的沙盒版本的样式表上测试了这个
// Allows autoversioning of css and js files
/**
* Given a file, i.e. /css/base.css, replaces it with a string containing the
* file's mtime, i.e. /css/base.1221534296.css.
*
* @param $file The file to be loaded. Must be an absolute path (i.e.
* starting with slash).
*/
function auto_version($file)
{
if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
return $file;
$mtime …Run Code Online (Sandbox Code Playgroud) 我目前有一个WCF Web API,我已经分成两个版本.第一个版本在api.mysite.com上运行.第二个目前尚未发布到生产中.
我想要一种方法来发布第二个API,使得对第一个版本的请求不会中断.我的想法是添加x-api-version标头并在内部将请求路由到指定的API.如果没有标头,则默认为版本1.我考虑添加/v1或/v2在路径的开头分隔版本,以便对v1或v2的请求可能如下所示:
http://api.mysite.com/v1/authentication/login
http://api.mysite.com/v2/auth/login
Run Code Online (Sandbox Code Playgroud)
唯一需要注意的是,没有版本的请求必须工作,默认为版本1(或我指定的任何版本).
虽然这听起来不错(至少对我来说),但我不确定推荐的实现方式是什么.我知道我总是可以做某种反向代理但是,我希望我的解决方案可以是一个程序化的解决方案.服务器部分所需的配置越少越好.如果有人有任何想法或链接到博客/教程,那将是太棒了!
提前致谢!
我很想知道其他开发者如何处理网络应用程序的版本和部署不同的版本.根本问题在于,当您部署新版本时,有人可能正在使用您的Web应用程序,此时他们没有客户端的Javascript等已过时.
在客户端对媒体进行版本控制很容易,但如果你的版本,你还需要对你的业务逻辑和数据库进行版本控制,这可能会让事情变得混乱......
所以我看到了几种解决方法:
部署新版本时,在站点上显示"升级"通知.
版本标记客户端并拒绝从旧客户端源向新版本提交任何内容.很公平,但它并没有真正与持续部署齐头并进.
持续数据库迁移 - 同时运行多个版本的应用程序(尽可能将用户迁移到新版本).这将需要将旧数据库模式的任何更新"转发"到新模式.似乎对部署最具吸引力,但也可能非常复杂.
在所有三个中间的某个地方.
我应该注意到,我知道担心这种事情超出了大多数应用程序的需求,但我正在思考它,我很想知道别人如何处理它.
我正在使用XMLSerializer将此类保存到文件中.该类有一个字符串和一个枚举,如下所示:
public class IOPoint
{
string Name {get; set;}
TypeEnum {get; set;}
}
public enum TypeEnum
{
Temperature,
Pressure,
Humidity,
}
Run Code Online (Sandbox Code Playgroud)
序列化时,它看起来像这样.
<IOPoint>
<Name>Relative Humidity</Name>
<TypeEnum>Humidity</TypeEnum>
</IOPoint>
Run Code Online (Sandbox Code Playgroud)
我一直在序列化和反序列化这个对象,几个版本都没有问题.我不再想支持湿度,所以我将它从枚举中删除了.但是,这会在从XML反序列化时导致异常,因为TypeEnum字段中的值Humidity不是TypeEnum的有效值.这是有道理的,但如何处理呢?
我想做的就是忽略这个错误.并将值保留为null.我已经尝试实现OnUnknownElement XmlDeserilizationEvent类.不幸的是,这并没有发现这个错误.
关于如何捕获和忽略此错误的任何想法(我可以在反序列化完成后清理).
米奇
根据文档,支持预发布版本控制,并给出了一个示例:
在NuSpec文件中,指定元素中的版本
Run Code Online (Sandbox Code Playgroud)<version>1.0.1-alpha</version>
我正在从.nuspec文件构建; 如果我逐字地包含这一行,那么运行(在包管理器控制台):
PM> nuget pack"Nuget\protobuf-net.nuspec"
然后我有点胖的错误:
Attempting to build package from 'protobuf-net.nuspec'.
NuGet.exe : Input string was not in a correct format.
At line:1 char:6
+ nuget <<<< pack "Nuget\protobuf-net.nuspec"
+ CategoryInfo : NotSpecified: (Input string wa...correct format.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是使用<version>1.0.1</version>并运行完全相同的命令,那么我得到:
Attempting to build package from 'protobuf-net.nuspec'.
Successfully created package 'C:\Dev\protobuf-net\protobuf-net.1.0.1.nupkg'.
Run Code Online (Sandbox Code Playgroud)
事实上,它已经正确建立.我的NuGet包管理器报告版本2.0.30625.9003.
所以:我做错了吗?还是他们打破了什么?
我正在尝试找出管理工作流的最佳方式,以允许使用Maven和Git进行版本编号和发布.
目前我的工作流程是:
我做"主"分支中的所有工作,除非我需要做一些实验(在这种情况下我切换到一个新的分支,定期合并)
这是一个明智的工作流程吗?我可以通过任何方式改进它.
我可以在较旧的Android运行时使用Android版本代码常量吗?例如,
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.HONEYCOMB) ...
Run Code Online (Sandbox Code Playgroud)
当HONEYCOMB首次定义此常量时,它会在运行Android操作系统的旧设备上运行而不会崩溃吗?假设我们用最近的SDK编译它?