分类
学习笔记

IIS7.0增加JSON文件解析

今在IIS7.0上部署web服务,所有扩展名为.JSON的数据无法使用,页面错误提醒需要增加MIME类型。后在MIME增加一个配置如下:

添加—> 文件扩展名为 .JSON ,MIME类型为text/json(application/x-javascript)。

特记录之。

分类
学习笔记

webservice的URL重写之UrlRewriter学习小结

在项目开发应用中,经常需要用到URL重定向技术。

以下文字主要介绍我用.net开发的webservice,在IIS6.0中使用URLRewriter实现重定向的具体过程以及遇到的问题。

问题描述:

在.net和JAVA的跨平台开发中,Java开发的webservice大多结尾无扩展名,而.net开发的webservice扩展名变为“.asmx”。如今需要用.net的服务替换java的旧系统。如果让调用方变动调用地址,很是麻烦,需要使用URL重定向技术解决。

方法:URLRewriter实现URL重定向。

步骤:

  1. 下载开源代码:http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
  2. 下载后安装到指定文件夹(默认C:\Program Files\URL Rewriting in ASP.NET)后,用Visual Studio打开解决方案,编译项目URLRewriter和ActionlessForm,分别生成URLRewriter.dll和ActionlessForm.dll (里面也有编译好的,自己找吧),还提供了其他参考学习资料,可以研究下。
  3. 添加引用UrlRewriter.dll 到您的项目bin目录下。
  4. 在asp.net项目的web.config下配置使用。
    • 在Web.Config的<configuration>和</configuration>添加以下节点:
    <configSections>    
  5. <section name="RewriterConfig" 
  6. type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
  7.  </configSections>  
    • 在Web.Config的<system.web>和</system.web>添加以下节点:
    <httpModules>        
  8. <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" /> 
  9.  </httpModules>  
    <!—<httpHandlers>  
  10.  <add verb="*" path="*.aspx"      
  11.    type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
  12. </httpHandlers>-->
    注释掉 <httpModules> 条目,以使用 HTTP 模块执行重写;
  13. 注释掉 <httpHandlers> 条目,以使用 HTTP 处理程序执行重写。

    其中指明要使用 HTTP 模块还是 HTTP 处理程序来执行 URL 重写。 我们的asmx应该为httpModules 模式,使用另外的会报错。

    • Web.config 配置重写规则,和configSections同级,放在下面。
    <RewriterConfig>  
  14.  <Rules>   <RewriterRule>     
  15.  <LookFor>要查找的模式</LookFor>   
  16.    <SendTo>要用来替换模式的字符串</SendTo>  
  17.  </RewriterRule>   <RewriterRule>    
  18.   <LookFor>要查找的模式</LookFor>     
  19.  <SendTo>要用来替换模式的字符串</SendTo>  
  20.  </RewriterRule>   ...   </Rules></RewriterConfig>

    每个重写规则均由 <RewriterRule> 元素表达。要搜索的模式由 <LookFor> 元素指定,而要替换所找到的模式的字符串将在 <SentTo> 元素中输入。这些重写规则将从头到尾进行计算。如果发现与某个规则匹配,URL 将被重写,并且对重写规则的搜索将会终止。

    在 <LookFor> 元素中指定模式时,请注意,要使用正则表达式来执行匹配和字符串替换。

    以下为我实际配置:

    <RewriterConfig>   

  21.  <Rules>     
  22.  <RewriterRule>   
  23.      <LookFor>~/(.+)</LookFor>      
  24.   <SendTo>~/index.asmx</SendTo>   
  25.    </RewriterRule>   
  26.  </Rules> 
  27. </RewriterConfig>
  28. IIS 中配置无扩展名的URLRewriter实现
  • 打开IIS,在扩展名影射中,扩展名:.*,处理程序aspnet_isapi。

1

总结:如果要配置出更多其他效果,请熟悉掌握正则表达式,以及参阅URLRewriter的官方文档。

本人在2处上费了神:

1、HTTP 处理方式节点上配置错误。导致asmx始终无法正常运行,而aspx等正常。

2、无扩展名的配置上,映射那里一直在添加按钮徘徊,没找准通配符的位置。望大家一步成功噢!

分类
学习笔记

Base64字符串编码/解码

示例代码:

c#:

public static string EncodeBase64(string str)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
        }
public static string DecodeBase64(string code)
        {
            System.Text.Encoding encoding = new System.Text.UTF8Encoding();
            return encoding.GetString(Convert.FromBase64String(code));
        }

java:

import java.io.IOException;
public class hello {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
        String aa="我爱hello world";
        String str1=EncodeBase64(aa);
        String str2=DecodeBase64(str1);
        System.out.println("----aa:"+str1+str2);
}
///base64解码
public static String DecodeBase64(String code) throws IOException
     {
sun.misc.BASE64Decoder   decoder=new   sun.misc.BASE64Decoder();  
         byte[]  t=   decoder.decodeBuffer(new   String(code.getBytes("utf-8")));  
         return  new  String(t,"utf-8");  
     }
///base64编码
public static String EncodeBase64(String code)  throws IOException
{
byte[] bstr=code.getBytes("UTF-8");
         sun.misc.BASE64Encoder encoder=new sun.misc.BASE64Encoder();
         return encoder.encode(bstr);
}
}
分类
学习笔记

.net(C#)操作Oracle的一点小问题的解决过程

问题表现:

初次学习连接Oracle,写了几行测试代码 。

         /// <summary>       
        /// 读数据表oracledatareader       
        /// </summary>        
        /// <param name="sender"></param>       
        /// <param name="e"></param>       
        private void button_Click(object sender, EventArgs e)
        {
            string connstr = ConfigurationManager.AppSettings.Get("conn");
            using (OracleConnection conn = new OracleConnection(connstr))
            {
                try
                {
                    string sqlstr = "SELECT col_1,col_2 FROM wangguodong_test1";
                    OracleCommand cmd = new OracleCommand(sqlstr, conn);
                    conn.Open();
                    using (OracleDataReader reader = cmd.ExecuteReader())
                    {
                        string str = string.Empty;
                        while (reader.Read())
                        {
                            str += reader.GetString(0) + ", " + reader.GetString(1);
                        } MessageBox.Show(str);
                    }
                }
                catch (Exception exx)
                {
                    MessageBox.Show(exx.Message);
                    throw exx;      
                }
                finally
                {
                    conn.Close();
                }
            }
        }

OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用。

在 System.Data.Common.UnsafeNativeMethods.OCIEnvCreate(IntPtr& envhpp, MODE mode, IntPtr ctxp, IntPtr malocfp, IntPtr ralocfp, IntPtr mfreefp, UInt32 xtramemsz, IntPtr usrmempp)
在 System.Data.OracleClient.TracedNativeMethods.OCIEnvCreate(IntPtr& envhpp, MODE mode)
在 System.Data.OracleClient.OciHandle..ctor(OciHandle parentHandle, HTYPE handleType, MODE ocimode, HANDLEFLAG handleflags)
在 System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
在 System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
在 System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.OracleClient.OracleConnection.Open()

我的解决思路:

1、问题因为客户端还是服务端引起。

方法如下:程序能编译过。在服务虚拟机上运行。问题没有,很正常。关掉服务机,在客户机运行。并不是每次报找不到服务机错误。问题依旧。断定,问题出在客户端。

2、客户端那里和服务端不同。

仔细想来。调用的驱动可能不同,随添加Oracle.DataAccess.dll引用编译运行。问题解决。

Oracle.DataAccess.dll和System.Data.OracleClient.dll 是有不同的。

相关文档:

在 Oracle 数据库上使用 Visual Studio 2008 构建 .NET 应用程序

System.Data.OracleClient 命名空间

分类
学习笔记

细节决定成败(学习体会)

下午配置短信搜索程序,遇到一些问题,最终一一解决,总结学习了点心得,和大家分享下。
1、相对路径和绝对路径

以前配置过这个程序,没有成功,一直觉得是数据库链接的问题,我始终认为问题应该出在数据源ODBC上。所以抓住有关ODBC方面的资料狂看。看了有一个小时左右,链接字符串改过来改过去,但是始终都不对。程序界面显示都是同一个错误。并且根据网友描述。我觉得我配置这里没有不妥。并且ODBC是能连接上数据库的。测试联通。所以想到问题应该不在这里,应该另寻出路。猛然发现同一文件夹下有日志记录。记录了从前的所有显示,随想到,何不找找这个问题出现的源头?发现是在一次重启系统后没有配置好。再看前一天记录。在程序启动时记录的日志和我今日的不同噢。有获取发送文件“XXXX”的记录,而今日我启动程序时获取发送文件是空。难道是我程序启动方法错了? 赶快转换思路,启动程序时候选择了填上绝对路径,按回车,启动成功。